我需要替换字符串中的所有非数字字符。例如:
String: 987sdf09870987=-0\\\`42
Replaced: 987**sdf**09870987**=-**0**\\\`**42
这是包含在**
字符中的所有非数字字符序列。我怎么能用String::replaceAll()
?
(?![0-9]+$).*
正则表达式与我想要的不符。我怎么能这样做?
答案 0 :(得分: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个或更多(+
)个符号(因为从^
到0
(9
)的[0-9]
}个数字。
关于(?![0-9]+$).*
正则表达式的几句话。它由一个负前瞻(?![0-9]+$)
组成,它检查从当前位置开始是否只有数字(如果只有数字到字符串的末尾,匹配失败),并且.*
匹配任何数字字符但换行符。您可以看到它正在做什么的示例here。我不认为它可以帮助你,因为你需要实际匹配非数字,而不仅仅是检查如果数字不存在。