如何替换字符串中的所有非数字字符?

时间:2015-08-03 07:07:56

标签: java regex

我需要替换字符串中的所有非数字字符。例如:

String: 987sdf09870987=-0\\\`42
Replaced: 987**sdf**09870987**=-**0**\\\`**42

这是包含在**字符中的所有非数字字符序列。我怎么能用String::replaceAll()

来做到这一点
(?![0-9]+$).*

正则表达式与我想要的不符。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

(\\D+)

您可以使用它并替换为**$1**。请参阅演示。

https://regex101.com/r/fM9lY3/2

答案 1 :(得分:1)

你可以使用一个否定的字符类作为非数字,并使用第0组反向引用来避免捕获组的开销(这里很小,但仍然是):

String x = "987sdf09870987=-0\\\\\\`42";
x = x.replaceAll("[^0-9]+", "**$0**");
System.out.println(x);

demo on IDEONE。输出:987**sdf**09870987**=-**0**\\\`**42

此外,在Java正则表达式中,字符类看起来比多个转义符号更整洁,这就是为什么我更喜欢这种[^0-9]+模式,这意味着匹配1个或更多(+)个符号(因为从^09[0-9]}个数字。

关于(?![0-9]+$).*正则表达式的几句话。它由一个负前瞻(?![0-9]+$)组成,它检查从当前位置开始是否只有数字(如果只有数字到字符串的末尾,匹配失败),并且.*匹配任何数字字符但换行符。您可以看到它正在做什么的示例here。我不认为它可以帮助你,因为你需要实际匹配非数字,而不仅仅是检查如果数字不存在。