string = str.replaceAll("\\W", " ")
这用“”(空格)替换所有特殊字符。
但我尝试将破折号“-”排除为特殊字符。
这是我的尝试:
string = str.replaceAll("\\W[^-]", " ")
但这不是我所期望的。
问:我如何使这项工作?
如果要匹配除\wand之外的所有字符,-可以使用:
[^\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会匹配,但/-不会匹配。