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

时间:2016-10-26 15:47:05

标签: java regex string character-class

我正在尝试使用我在此处找到的方法替换除了 - 和_之外的所有标点符号,但我只能将其用于"使用已发布的使用否定前瞻的确切代码:

(?!")\\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 个答案:

答案 0 :(得分:4)

使用character class subtraction(并添加+量词来匹配1个或多个标点字符的块):

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

请参阅Java demo

[\\p{Punct}&&[^_-]]+表示匹配\p{Punct}类中除_-之外的任何字符。

您也可以使用找到的构造,但是您需要将-_放入角色类,然后使用.replaceAll("(?![_-])\\p{Punct}", "").replaceAll("(?:(?![_-])\\p{Punct})+", "")