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