使用正则表达式从 java 字符串中删除除 - 和 _ 之外的所有标点符号

Removing all punctuation except - and _ from a java string using RegEx

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

(?!")\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.

谢谢。

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

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

参见Java demo

[\p{Punct}&&[^_-]]+ 表示匹配 \p{Punct} class 中的任何字符,除了 _-.

你找到的构造也可以用,但是你需要把-_变成一个字符class,然后用.replaceAll("(?![_-])\p{Punct}", ""),或 .replaceAll("(?:(?![_-])\p{Punct})+", "").