使用RegEx从Java字符串中删除除-和_以外的所有标点符号

sea*_*nEd 2 java regex string character-class

我正在尝试使用在这里找到的方法来替换除-和_之外的所有标点符号,但我只能使用所发布的确切代码使用负前瞻来使其在“上工作:

(?!")\\p{punct}

//Java example:

String string = ".\"'";
System.out.println(string.replaceAll("(?!\")\\p{Punct}", ""));
Run Code Online (Sandbox Code Playgroud)

我试过了:

name = name.replaceAll("(?!_-)\\p{Punct}", ""); // which just replaces all punctuation.

name = name.replaceAll("(?!\_-)\\p{Punct}", ""); // which gives an error.
Run Code Online (Sandbox Code Playgroud)

谢谢。

Wik*_*żew 5

使用字符类减法(并添加一个+量词以匹配1个或多个标点字符的块):

name = name.replaceAll("[\\p{Punct}&&[^_-]]+", "");
Run Code Online (Sandbox Code Playgroud)

请参阅Java演示

[\\p{Punct}&&[^_-]]+方法匹配\p{Punct}类中的任何字符,除了_-

您也可以使用找到的结构,但是您需要将-_放在字符类中,并使用.replaceAll("(?![_-])\\p{Punct}", "").replaceAll("(?:(?![_-])\\p{Punct})+", "")