我正在尝试使用我在这里找到的方法来替换除-和_之外的所有标点符号,但我只能使用使用负面前瞻性的发布的确切代码:
(?!")\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.
谢谢。
使用字符类减法(并添加+
量词来匹配1个或多个标点字符的块):
name = name.replaceAll("[\p{Punct}&&[^_-]]+", "");
参见Java演示。
[\p{Punct}&&[^_-]]+
表示匹配p{Punct}
类中除_
和-
以外的任何字符。
您找到的结构也可以使用,但您需要将-
和_
放入字符类中,并使用.replaceAll("(?![_-])\p{Punct}", "")
或.replaceAll("(?:(?![_-])\p{Punct})+", "")
。