我试图通过使用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的订单好吗?
答案 0 :(得分:6)
\w
模式匹配下划线,[^\w]
匹配除字母,数字和下划线之外的任何字符。
替换为\p{Alnum}
:
String pattern = "[^\\p{Alnum}\\s?:().,'+/-]";
请注意,我将连字符放在字符类的末尾,以免转义,并从\
中删除转义的/
,因为它不是特殊的正则表达式元字符。
请参见Java regex demo。
[^\\p{Alnum}\\s?:().,'+/-]
模式匹配任何字符,但:
\p{Alnum}
-字母数字[a-zA-Z0-9]
\s
-空格?
-问号:
-冒号(
-一个(
符号)
-一个)
符号.
-一个点,
-逗号'
-单引号+
-加号/
-正斜杠-
-连字符。