替换除一个之外的所有特殊字符

时间:2013-06-02 21:43:01

标签: java regex

string = str.replaceAll("\\W", " ")

用“”(空格)替换所有特殊字符。

但我尝试将短划线“ - ”排除为特殊字符。

这是我的尝试:

string = str.replaceAll("\\W[^-]", " ")

但这不是我所期待的。

:我该如何使用?

3 个答案:

答案 0 :(得分:10)

如果您想匹配除\w-以外的所有字符,您可以使用:

[^\w-]

例如:

str.replaceAll("[^\\w-]+", " ")

答案 1 :(得分:4)

在这种特殊情况下,

Qtax's answer可能是最简单的,因为\W有一个内置的补充,即\w。但总的来说,知道Java的正则表达式引擎支持使用&&运算符的字符类中的“交叉点”是有用的 - 你可以说

[\W&&[^-]]

匹配同时为\W a [^-]的单个字符,即非单词字符,但不是连字符。

答案 2 :(得分:3)

使用否定的字符类......

string = str.replaceAll("[^\\w-]", " ")

\W非常方便,但是当您需要在池中添加额外字符时,需要使用带有\w的字符类。

这不起作用的原因......

string = str.replaceAll("\\W[^-]", " ")

...是因为它正在扫描非单词字符([^A-Za-z0-9_]),然后是而不是 -个字符。例如,/A将匹配,但/-不匹配。