【问题标题】:Replace all characters not in range (Java String)替换所有不在范围内的字符(Java 字符串)
【发布时间】:2011-04-20 07:46:47
【问题描述】:

如何替换字符串中不符合条件的所有字符。我在使用 NOT 运算符时遇到了麻烦。

具体来说,我正在尝试删除所有不是数字的字符,到目前为止我已经尝试过:

String number = "703-463-9281";
String number2 = number.replaceAll("[0-9]!", ""); // produces: "703-463-9281" (no change)
String number3 = number.replaceAll("[0-9]", "");  // produces: "--" 
String number4 = number.replaceAll("![0-9]", ""); // produces: "703-463-9281" (no change)
String number6 = number.replaceAll("^[0-9]", ""); // produces: "03-463-9281"

【问题讨论】:

    标签: java regex character-class


    【解决方案1】:

    解释:字符类开头的 ^ 将否定该类但它必须在类内部才能工作。字符类之外的相同字符是字符串/行开头的锚。

    你可以试试这个:

    "[^0-9]"
    

    【讨论】:

    • 解释一下:字符类开头的^ 将否定该类但它必须在类中才能工作。字符类之外的相同字符是字符串/行开头的锚。
    【解决方案2】:

    这是字符类定义以及它如何与一些正则表达式元字符交互的快速备忘单。

    • [aeiou] - 只匹配一个小写元音
    • [^aeiou] - 匹配ISN'T小写元音的字符(否定字符类)
    • ^[aeiou] - 匹配锚定在行首的小写元音
    • [^^] - 匹配不是插入符号的字符/'^'
    • ^[^^] - 匹配行首不是插入符号的字符
    • ^[^.]. - 匹配除文字句点外的任何内容,后跟“任何”字符,位于行首
    • [a-z] - 恰好匹配'a''z'范围 中的一个字符(即所有小写字母)
    • [az-] - 匹配 'a''z''-'(文字破折号)
    • [.*]* - 匹配点和星号的连续序列(可能为空)
    • [aeiou]{3} - 匹配 3 个连续的小写元音(不一定都是同一个元音)
    • \[aeiou\] - 匹配字符串 "[aeiou]"

    参考文献

    相关问题

    【讨论】:

      猜你喜欢
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-01
      • 2021-06-08
      • 2012-09-16
      • 1970-01-01
      • 2022-10-15
      相关资源
      最近更新 更多