替换不在范围内的所有字符(Java String)

如何替换不符合条件的字符串中的所有字符。 我在使用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" 

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

您可以尝试这样做:

 "[^0-9]" 

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

  • [aeiou] – 恰好匹配一个小写元音
  • [^aeiou] – 匹配一个不是小写元音的字符( 否定字符类)
  • ^[aeiou] – 匹配锚定在该行开头的小写元音
  • [^^] – 匹配不是插入符号的字符/ '^'
  • ^[^^] – 匹配行开头不是插入符号的字符
  • ^[^.]. – 在行的开头匹配除文字句点之外的任何内容,后跟“任意”字符
  • [az] – 恰好匹配'a''z' 范围内的一个字符(即所有小写字母)
  • [az-] – 匹配'a''z''-' (文字短划线)
  • [.*]* – 匹配点和星号的连续序列(可能是空的)
  • [aeiou]{3} – 匹配3个连续的小写元音(所有元音都不一样)
  • \[aeiou\] – 匹配字符串"[aeiou]"

参考

  • regular-expressions.info/Character类 , Anchors , Dot , Repetition

相关问题

  • 正则表达式:为什么[01-12]范围不按预期工作?
  • 字符类减法,从Java语法转换为RegexBuddy
  • 如何从class级中排除某些角色?