【问题标题】:Replacing characters in String using Meta characters or character classes使用元字符或字符类替换字符串中的字符
【发布时间】:2020-09-05 18:00:01
【问题描述】:

我写信是为了删除字符串中只有小写字母的所有非字母数字字符。

我正在使用 replaceAll 函数并查看了一些正则表达式

我的参考来自:https://www.vogella.com/tutorials/JavaRegularExpressions/article.html 这表明

  • \s : 空白字符,[ \t\n\x0b\r\f]的缩写
  • \W : 非单词字符 [^\w]

我在 Java 中尝试了以下操作,但结果没有删除空格或符号:

lowercased = lowercased.replaceAll("\\W\\s", "");

输出:

amanaplanac analp anam a

我可以知道是什么问题吗?

【问题讨论】:

    标签: java regex


    【解决方案1】:

    Regex \W\s 表示“一个非单词字符后跟一个空白字符”

    如果您想替换其中之一的任何字符,请使用以下之一:

    • \W|\s 其中| 表示

    • [\W\s] 其中[ ] 是一个字符类,在这种情况下它合并了内置的特殊字符类\W\s,因为它们就是这样。

    在这两个中,我建议使用第二个。


    当然,\s 是多余的,因为\s 表示空白字符,\W 表示非单词字符,并且由于空格不是单词字符,单独使用 \W 就足够了。

    lowercased = lowercased.replaceAll("\\W+", "");
    

    【讨论】:

    • 也不是替换每个字符,而是使用\W+ 完全替换它们是有意义的。这是完美的。
    【解决方案2】:

    正则表达式\W 用于匹配不是数字(0-9)、字母(A-Za-z)和下划线(_)的字符。 /s 用于匹配空间。

    因为/W 已经注意匹配非字母数字字符(不包括下划线)。无需使用\s

    因此,如果您使用 \W,则您允许下划线 (_) 带有字母数字值。

    也可以使用以下内容排除下划线。

    lowercased = lowercased.replaceAll("\\W|_", "");
    

    【讨论】:

      【解决方案3】:

      使用|(或运算符),如\W|\s,因为\W\s 都是要替换的独立大小写。而且由于空格不是单词字符,因此您只能使用\W

      lowercased = lowercased.replaceAll("\\W|\\s", "");
      

      【讨论】:

        猜你喜欢
        • 2013-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-09
        • 1970-01-01
        相关资源
        最近更新 更多