string = str.replaceAll("\\W", " ")
用“”(空格)替换所有特殊字符。
但我尝试将短划线“ - ”排除为特殊字符。
这是我的尝试:
string = str.replaceAll("\\W[^-]", " ")
但这不是我所期待的。
问:我该如何使用?
答案 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
将匹配,但/-
不匹配。