替换除一个之外的所有特殊字符
string = str.replaceAll("\\W", " ")
这用“”(空格)替换所有特殊字符。
但我尝试将短划线“ – ”排除为特殊字符。
这是我的尝试:
string = str.replaceAll("\\W[^-]", " ")
但这不是我所期待的。
问 :我该如何做到这一点?
如果你想匹配除\w
和-
之外的所有字符,你可以使用:
[^\w-]
例如:
str.replaceAll("[^\\w-]+", " ")
在这种特殊情况下, Qtax的答案可能是最简单的,因为\W
有内置的补码,即\w
。 但总的来说,知道Java的正则表达式引擎支持使用&&
运算符在字符类中的“交叉点”是有用的 – 你可以说
[\W&&[^-]]
匹配单个字符既是\W
又是[^-]
,即非单词字符,但也不是连字符。
使用否定的字符类……
string = str.replaceAll("[^\\w-]", " ")
\W
非常方便,但是当你需要在池中添加额外的字符时,你需要使用带有\w
的字符类。
这不起作用的原因……
string = str.replaceAll("\\W[^-]", " ")
…是因为它正在扫描非单词字符( [^A-Za-z0-9_]
),后面跟不是 -
字符。 例如, /A
将匹配,但/-
不匹配。