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

时间:2010-10-02 19:54:37

标签: java regex character-class

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

2 个答案:

答案 0 :(得分:43)

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

你可以试试这个:

"[^0-9]"

答案 1 :(得分:27)

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

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

参考

相关问题

相关问题