2

我已经尝试了几个小时来获得一个匹配未知数量的连续数字的正则表达式。我相信 [0-9]* 或 [\d]* 应该是我想要的,但当我使用 Java 的 String.replaceAll 时,它会将我的替换字符串添加到不应该与正则表达式匹配的地方。

例如:我有一个输入字符串“This is my99String problem”如果我的替换字符串是“~”

当我运行这个

myString.replaceAll("[\\d]*", "~" )

或者

myString.replaceAll("[0-9]*", "~" )

我的返回字符串是“~T~h~i~s~~i~s~~m~y~S~t~r~i~n~g~~p~r~o~b~l~e~米~”

如您所见,数字已被替换,但为什么还要在字符之间附加我的替换字符串。

我希望它看起来像“这是我的~字符串问题”

我在做什么错,为什么 java 匹配是这样的。

4

2 回答 2

9

\\d*匹配 0 个或多个数字,因此它甚至匹配一个空字符串。并且在字符串中的每个字符之前都有一个空字符串。因此,对于它们中的每一个,它都将其替换为~,因此是结果。

尝试\\d+改用。而且您不需要包含\\d在字符类中。

于 2013-08-07T15:02:21.690 回答
1
[\\d]*

匹配零个或多个(由 定义*)。因此,您将通过字符串获得所有匹配项。如果你使用

[\\d]+

这将匹配 1 个或多个数字。

文档

Greedy quantifiers
X?  X, once or not at all
X*  X, zero or more times
X+  X, one or more times
于 2013-08-07T15:04:47.263 回答