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