我正在尝试使用我在此处找到的方法替换除了 - 和_之外的所有标点符号,但我只能将其用于"使用已发布的使用否定前瞻的确切代码:
(?!")\\p{punct}
//Java example:
String string = ".\"'";
System.out.println(string.replaceAll("(?!\")\\p{Punct}", ""));
我试过了:
name = name.replaceAll("(?!_-)\\p{Punct}", ""); // which just replaces all punctuation.
name = name.replaceAll("(?!\_-)\\p{Punct}", ""); // which gives an error.
感谢。
答案 0 :(得分:4)
使用character class subtraction(并添加+
量词来匹配1个或多个标点字符的块):
name = name.replaceAll("[\\p{Punct}&&[^_-]]+", "");
请参阅Java demo。
[\\p{Punct}&&[^_-]]+
表示匹配\p{Punct}
类中除_
和-
之外的任何字符。
您也可以使用找到的构造,但是您需要将-
和_
放入角色类,然后使用.replaceAll("(?![_-])\\p{Punct}", "")
或.replaceAll("(?:(?![_-])\\p{Punct})+", "")