使用正则表达式匹配末尾包含“(数字)”模式的字符串

时间:2015-04-07 19:53:55

标签: java regex

我使用以下模式检查它是否与这种字符串匹配:

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)";

有什么建议吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

您需要在字符类中包含括号 - \w等同于[a-zA-Z_0-9],因此它不会涵盖它们。当放置在字符类中时,量词+与文字+匹配,因此应将其设置在方括号外。但是,既然你想要匹配(4)的情况,那么它应该是*

assertEquals(true, str.matches("[\\w ()]*\\(\\d\\)"));

更一般地说,根据您的要求“包含任何字符并以(正数字)结尾的字词,以下内容会更合适:

assertEquals(true, str.matches(".*\\(\\d\\)$"));

.匹配任何字符; $标记行的结尾)

答案 1 :(得分:0)

以下正则表达式匹配包含任何字符并以(正数)结尾的字词:

.*\([1-9]+\)

这里有两点需要注意:

  1. 原始帖子中提供的正则表达式使用匹配单词字符的\w[a-zA-Z0-9_]
  2. \d匹配数字。这意味着你的正则表达式也匹配零,既不是正数,也不是负数。如果您只想要正数,那么您应该使用[1-9]+