我使用以下模式检查它是否与这种字符串匹配:
words that contains any characters and ends with (positive numbers)
assertEquals(true, str.matches("[\\w+ ]*\\(\\d\\)"));
断言在以下情况下返回true:
str = "one two three (1)";
str = "one 2 three to 400 (4)";
str = " begins with space (4)";
str = "(4)";
但它在以下方面失败了:
str = "one (two) three (1)";
有什么建议吗?
谢谢!
答案 0 :(得分:2)
您需要在字符类中包含括号 - \w
等同于[a-zA-Z_0-9]
,因此它不会涵盖它们。当放置在字符类中时,量词+
与文字+
匹配,因此应将其设置在方括号外。但是,既然你想要匹配(4)
的情况,那么它应该是*
:
assertEquals(true, str.matches("[\\w ()]*\\(\\d\\)"));
更一般地说,根据您的要求“包含任何字符并以(正数字)结尾的字词,以下内容会更合适:
assertEquals(true, str.matches(".*\\(\\d\\)$"));
(.
匹配任何字符; $
标记行的结尾)
答案 1 :(得分:0)
以下正则表达式匹配包含任何字符并以(正数)结尾的字词:
.*\([1-9]+\)
这里有两点需要注意:
\w
:[a-zA-Z0-9_]
\d
匹配数字。这意味着你的正则表达式也匹配零,既不是正数,也不是负数。如果您只想要正数,那么您应该使用[1-9]+