我正试图在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]+"));
我做错了什么?
答案 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)