我需要正则表达式在行中分离单词,这是我所拥有的
public class Example {
public static void main(String[] args) {
countWords(List.of("Some random stuff, another stuff, words in quotes „Example“, Oops!"));
}
public static void countWords(List<String> lines) {
lines.
stream().map(line -> line.split("[\\\\p{Punct}«»\\s\\d„“…)–]+")).forEach(e -> System.out.println(Arrays.toString(e)));
}
}
但结果是
[Some,ra,dom,s,ff,,a,o,her,s,ff,,words,i,q,o,es,Exam,le,,Oo,s!]
正如您所看到的,我们将单词拆分,留下了额外的逗号和感叹号(我认为p{Punct}包括感叹号)
不清楚您试图完成什么,但输出与您的代码相匹配。正则表达式匹配以下任何情况的出现:\, p,{, P, u, n, c, t, }, ", ", 任何空格,任何数字,",",...,),-。
因此,您的线路在许多地方被分割。额外的逗号是因为数组
的toString
是如何实现的。
这里有一个有用的资源来检查你的正则表达式实际上匹配什么:https://regex101.com/r/bHP5lu/1
取消Java字符串文字"\\\p{Punct}"
,我们得到:
\\p{Punct}
在字符类中,这被理解为反斜杠字符,字符p
,{/code>,
p
,u
,n
,c
,t
,}
,显然不是您想要的。
您在正则表达式中添加了一个额外的反斜杠。就像
\d
或\s
一样,\p{XXX}
只需要一个反斜杠作为前缀,即使在字符类中使用。因此,您应该从Java字符串文字中删除两个反斜杠:
"[\\p{Punct}«»\\s\\d„“…)–]+"
描述 (Description) 字符类\p{Punct}匹配任何标点字符。 例子 (Example) 以下示例显示了Posix字符类匹配的用法。 package com.wenjiangs; import java.util.regex.Matcher; import java.util.regex.Pattern; public class PosixCharacterClassDemo {
TextBox控件的要求是接受以下内容作为有效输入: null 更新: 第二个regex成功地匹配了console app中的目标字符串“Number of Rooms”,如下所示。但是,当输入为“房间数量”时,在aspx标记中使用相同的表达式并不匹配。以下是相关的aspx标记:
我得到两个错误: Java:不兼容类型:无法推断类型变量R(参数不匹配;方法引用无效) 对toString的引用是不明确的,java.lang.Integer中的方法toString(int)和java.lang.Integer中的方法toString()都是不明确的 并且编译器无法推断所需的方法引用。 但是关于第二个,编译器引用的静态上下文在哪里? 这个错误与Integer类的方法toStrin
在f2中,我们有指针 改为func f2(arg int)(int,*error)?或者,在这种情况下,为什么我们返回指针而不是值?
我们正在对CITY、ST、ZIP形式的邮政编码进行丢失验证。这些可以跨越国家,因此以下所有内容都是有效的: > 宾夕法尼亚州匹兹堡,15020 安大略省汉密尔顿市L8E 4B3 我想验证的是,我们有三个逗号分隔的单词(空格可以)。所有这些都是有效的: foo、bar、baz 然而,这些将是无效的,因为它们没有两个逗号和三个单词: foo, bar 嘘,酒吧,巴兹,砰 foo,酒吧, foo, ba