0

我试图在 java 中“找到”一系列非常具体的字符,但我的正则表达式无法正常工作。

我想找到一个单词(任何单词),然后是一个空格,然后是一个正斜杠,然后是另一个空格,然后是一个“M”(小写或大写),然后是一系列数字。我正在使用以下行:

Elements rating = doc.getElementsMatchingText(Pattern.compile("\\b\\s/\\s[mM][0-9]+")); 

但这是找到整行(预期模式之前和之后的单词)。这也无济于事:

Elements rating = doc.getElementsMatchingText(Pattern.compile("^\\b\\s/\\s[mM][0-9]+"));    

我究竟做错了什么?

4

3 回答 3

2

您的案例的正确模式是\\b\\w+\\s/\\s[mM][0-9]+.

但是,您描述的问题与您使用的 API 有关,而不是与模式有关。请注意,getElementsMatchingText这不允许您访问匹配详细信息,因此您无法提取与模式匹配的部分文本。

doc您需要手动迭代所有元素并应用于Matcher.find()每个元素的文本,或者只需使用Matcher.find()相同的模式再次应用于由getElementsMatchingText. 然后您就可以将匹配的部分提取为Matcher.group().

于 2012-04-10T16:13:30.933 回答
0

你的正则表达式有缺陷。我会提议

\w+ / [Mm]\d+

(记得在输入 java 字符串时适当转义)

关于你的正则表达式的一些事情:

1)您目前没有任何东西可以匹配“单词(任何单词)”(!!!)我选择 \w+ 来匹配至少包含一个单词字符的单词。例如,如果您想进一步自定义,您可以执行 \w{2,10} 之类的操作来处理 2 到 10 个字符之间的单词。

2)你根本不需要 \b 因为 \w* 匹配只匹配有效的单词字符

3) 请记住 \s 可能不仅仅匹配一个空格.. 我只使用一个空格,但如果你对它匹配选项卡、新行(如果以这种方式配置)等没问题,你可以输入 \s。

4)我认为 \d 比 [0-9] 更惯用和可读

于 2012-04-10T16:15:05.653 回答
-1

关于正则表达式,请尝试:

.* \ [毫米][1-9]*

我用http://rubular.com/来测试我的正则表达式,所以你可以做你的实验。

再见

于 2012-04-10T16:12:39.350 回答