使用正则表达式从 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})+", "")
.
我正在尝试使用我在此处找到的方法替换除 - 和 _ 之外的所有标点符号,但我只能使用发布的使用否定前瞻的确切代码让它在 " 上工作:
(?!")\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})+", "")
.