2

我想要一个正则表达式来删除除下划线以外的所有特殊字符。我可以替换所有特殊字符,但我不知道如何保留下划线。这是删除所有特殊字符的代码,

String myname= "!john_smith@#-".replaceAll("\\p{Punct}+", "");

任何想法如何修改正则表达式以便我保留下划线?

谢谢,帕特里克

4

2 回答 2

12

Well\\p...与([^\\P...]具有该属性的字符的否定字符类)相同,然后您也可以将下划线放在那里:

"[^\\P{Punct}_]+"

或者,使用负前瞻

"(?:(?!_)\\p{Punct})+"

另外,看看你的例子,也许像这样简单的东西对你来说就足够了:

"[^\\w\\s]+"

将删除除字母、数字、下划线和空格之外的所有内容。

于 2012-11-21T14:03:13.957 回答
6

使用集差:

System.out.println("#%a#%^$^_#$%b#$".replaceAll("[\\p{Punct}&&[^_]]", ""));

印刷

a_b

参考:字符类

于 2012-11-21T14:02:26.893 回答