Java 如何替换字符串中的所有非数字字符?
我需要替换字符串中的所有非数字字符。例如:Java 如何替换字符串中的所有非数字字符?,java,regex,Java,Regex,我需要替换字符串中的所有非数字字符。例如: String: 987sdf09870987=-0\\\`42 Replaced: 987**sdf**09870987**=-**0**\\\`**42 这是所有非数字字符序列包装成**字符。如何使用String::replaceAll() 正则表达式与我想要的不匹配。我该怎么做 (\\D+) 您可以使用此选项并替换为**$1**。请参阅演示 您可以对非数字使用一个否定字符类,并使用第0个group back引用来避免捕获组的开销(这是最小的,但
String: 987sdf09870987=-0\\\`42
Replaced: 987**sdf**09870987**=-**0**\\\`**42
这是所有非数字字符序列包装成**
字符。如何使用String::replaceAll()
正则表达式与我想要的不匹配。我该怎么做
(\\D+)
您可以使用此选项并替换为**$1**
。请参阅演示
您可以对非数字使用一个否定字符类,并使用第0个group back引用来避免捕获组的开销(这是最小的,但仍然是): 看。输出:
987**sdf**09870987**=-**0**\\\`**42
另外,在Java正则表达式中,字符类看起来比多个转义符号更整洁,这就是为什么我更喜欢这种[^0-9]+
模式,意思是匹配1个或多个(+
)符号,而不是(因为^
)从0
到9
([0-9]
)的数字
关于你的
(?![0-9]+$).
regex的几句话。它由一个负前瞻(?![0-9]+$)
和*
组成,前者检查从当前位置开始是否只有数字(如果只有数字到字符串末尾,则匹配失败),后者匹配除换行以外的任何字符。您可以看到它正在做什么的示例。我认为它对您没有帮助,因为您需要实际匹配非数字,而不仅仅是检查是否缺少数字。string.replaceAll(“[^0-9]”),“)
@SimY4不起作用。我应该把它替换成什么?你是说string.replaceAll(“\\D+”,“**”)
?那么它就不工作了。我需要将字符序列包装到**
中,而不仅仅是用**
来回复它。为什么OP要“尝试这个”?一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客。
(\\D+)
String x = "987sdf09870987=-0\\\\\\`42";
x = x.replaceAll("[^0-9]+", "**$0**");
System.out.println(x);