使用正则表达式找不到一个单词

时间:2012-04-10 16:02:23

标签: java regex

我正试图在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]+"));    

我做错了什么?

3 个答案:

答案 0 :(得分:2)

您案件的正确模式为\\b\\w+\\s/\\s[mM][0-9]+

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

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

答案 1 :(得分:0)

你的正则表达式是有缺陷的。我建议

\w+ / [Mm]\d+

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

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

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

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

3)请记住\ s可能只匹配一个空格..我只使用一个空格但你可以放入\ s如果你可以匹配标签,新行(如果配置那样)等等

4)我认为\ d比[0-9]

更具惯用性和可读性

答案 2 :(得分:-1)

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

  

。* \ [[Mm] [1-9] *

我使用http://rubular.com/来测试我的正则表达式,因此您可以进行实验。

再见