29

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

2 回答 2

50

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

你可以试试这个:

"[^0-9]"
于 2010-10-02T19:55:25.700 回答
27

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

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

参考

相关问题

于 2010-10-02T20:23:14.480 回答