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

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

但我尝试将破折号“-”排除为特殊字符。

这是我的尝试:

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

但这不是我所期望的。

:我如何使这项工作?

4

3 回答 3

10

如果要匹配除\wand之外的所有字符,-可以使用:

[^\w-]

例如:

str.replaceAll("[^\\w-]+", " ")
于 2013-06-02T21:44:41.293 回答
4

在这种特殊情况下, Qtax 的答案可能是最简单的,因为有一个内置的补充\W,即\w. 但总的来说,知道 Java 的正则表达式引擎支持使用&&运算符在字符类中的“交集”是很有用的——你可以说

[\W&&[^-]]

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

于 2013-06-02T22:32:24.980 回答
3

使用否定字符类...

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

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

这不起作用的原因...

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

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

于 2013-06-02T21:44:39.040 回答