使用正则表达式从Java字符串中删除除“-”和“_”以外的所有标点符号。

5

我正在尝试使用在这里找到的方法替换所有标点符号,除了 - 和 _,但我只能在双引号上使用精确代码才能使其起作用,该代码使用了负向先行断言:

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

感谢您。

如果您恰好登录,请考虑接受答案,如果它对您有用的话。 - Wiktor Stribiżew
1个回答

10
使用字符类减法(并添加+量词以匹配一个或多个标点符号字符的块):了解更多
name = name.replaceAll("[\\p{Punct}&&[^_-]]+", "");

请查看Java演示

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

你发现的这个结构也可以使用,但你需要将-_放入字符类中,并使用.replaceAll("(?![_-])\\p{Punct}", "").replaceAll("(?:(?![_-])\\p{Punct})+", "")


不错。@Wiktor,请问有什么好的教程可以学习正则表达式吗?最好能够解释一些高级水平的教程。 - Shreyas Sarvothama
先阅读课程:正则表达式。然后,我建议在regexone.com上完成所有课程,阅读regular-expressions.inforegex SO标签描述(还有许多其他链接到优秀在线资源的网站)以及社区SO帖子What does the regex mean。此外,rexegg.com也值得一看。 - Wiktor Stribiżew
感谢@WiktorStribiżew - seanEd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接