用于替换除下划线之外的所有特殊字符的Java正则表达式

时间:2012-11-21 14:00:11

标签: java regex

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

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

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

谢谢, 帕特里克

2 个答案:

答案 0 :(得分:9)

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

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

或者,使用否定前瞻

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

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

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

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

答案 1 :(得分:6)

使用设置差异:

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

打印

a_b

参考:Character Classes