【问题标题】:Replace all special character except one替换除一个以外的所有特殊字符
【发布时间】:2013-05-29 01:33:24
【问题描述】:
string = str.replaceAll("\\W", " ")

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

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

这是我的尝试:

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

但这不是我所期望的。

:我该如何进行这项工作?

【问题讨论】:

    标签: java regex


    【解决方案1】:

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

    [^\w-]
    

    例如:

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

    【讨论】:

      【解决方案2】:

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

      [\W&&[^-]]
      

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

      【讨论】:

        【解决方案3】:

        使用否定字符类...

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

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

        这不起作用的原因......

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

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

        【讨论】:

          猜你喜欢
          • 2018-11-17
          • 1970-01-01
          • 2012-11-06
          • 1970-01-01
          • 2021-08-09
          • 1970-01-01
          • 2017-09-22
          • 2020-02-26
          相关资源
          最近更新 更多