正则表达式不会从模式中删除下划线

时间:2019-04-17 07:40:06

标签: java regex

我试图通过使用java.util.regex.Matcher和java.util.regex.pattern进行编码,以允许在字符串中使用某些特殊字符,但这并未消除下划线。我是新来的。我需要帮助。 代码摘录如下:

  // String to be scanned to find the pattern.
  String line = "This order was _:$ placed for QT3000! OK?";
  String pattern = "[^\\w\\s\\-?:().,'+\\/]";
  String s = null;

  // Create a Pattern object
  Pattern r = Pattern.compile(pattern);

  // Now create matcher object.
  Matcher m = r.matcher(line);
  s= m.replaceAll("");
  System.out.println("Output: " + s);

预期:此订单是:放置QT3000可以吗? 实际:此订单是_:下达QT3000的订单好吗?

1 个答案:

答案 0 :(得分:6)

\w模式匹配下划线,[^\w]匹配除字母,数字和下划线之外的任何字符。

替换为\p{Alnum}

String pattern = "[^\\p{Alnum}\\s?:().,'+/-]";

请注意,我将连字符放在字符类的末尾,以免转义,并从\中删除转义的/,因为它不是特殊的正则表达式元字符。

请参见Java regex demo

[^\\p{Alnum}\\s?:().,'+/-]模式匹配任何字符,但:

  • \p{Alnum}-字母数字[a-zA-Z0-9]
  • \s-空格
  • ?-问号
  • :-冒号
  • (-一个(符号
  • )-一个)符号
  • .-一个点
  • ,-逗号
  • '-单引号
  • +-加号
  • /-正斜杠
  • --连字符。