2

我正在使用 java 正则表达式库来查找模式“String_OneOrMoreDigits”。例如,“linenumber_1”或“linenumber_31”或“linenumber_456”。我正在尝试以下模式,假设我将获得“linenumber_2”或“linenumber_44”类型的字符串。但是,我只得到“linenumber_2”类型的字符串,它最后不匹配多个数字。如何去匹配这样的字符串?

Pattern pattern = Pattern.compile("(linenumber_[0-9])|(linenumber_[0-9][0-9])");

4

3 回答 3

6

无需交替,只需在 : 上使用“一个或多个”限定符[0-9]

Pattern pattern = Pattern.compile("linenumber_[0-9]+");

这将匹配“linenumber_1”、“linenumber_44”和“linenumber_12345984”。如果您只想匹配一位或两位数字,您可以通过更明确地说明允许的位数来做到这一点:

Pattern pattern = Pattern.compile("linenumber_[0-9]{1,2}");
于 2012-11-13T07:43:11.760 回答
2

如果您想要特定数量的数字,请添加,而不是

Pattern pattern = Pattern.compile("linenumber_[0-9]{1,2}");

你也可以使用

Pattern pattern = Pattern.compile("linenumber_[0-9]{1|4|8}");

这将指定您想要 1 位、4 位或 8 位。就像克劳德说的,

Pattern pattern = Pattern.compile("linenumber_[0-9]+");

将匹配任意数量的数字。

于 2012-11-13T08:06:12.453 回答
1

您还可以使用:

Pattern pattern = Pattern.compile("linenumber_\d+");

如果您需要不区分大小写的匹配,(?i)请在开头附加如下:

Pattern pattern = Pattern.compile("(?i)linenumber_\d+");

(?i)允许正则表达式引擎执行不区分大小写的匹配。 \d将匹配任何数字0 to 9

于 2012-11-13T11:59:32.590 回答