2015-02-23 92 views
3

我想从字符串中除去某些非字母数字字符,但某些字符除外。如何删除任何非字母数字字符?

StringUtils.replacePattern(input, "\\p{Alnum}", "");

如何我还可以排除那些特定的字符,如.-;

+2

http://docs.oracle。 com/javase/7/docs/api/java/util/regex/Pattern.html – 2015-02-23 16:19:32

+0

你还需要支持unicode字符吗? – anubhava 2015-02-23 16:42:56

回答

4

使用不操作^

[^a-zA-Z0-9.\-;]+ 

这意味着 “匹配究竟是不是这些字符”。所以:

StringUtils.replacePattern(input, "[^a-zA-Z0-9.\\-;]+", ""); 

不要忘记正确逃生需要转义字符:您需要使用两个反斜杠\\因为你的正则表达式是Java字符串。

+0

所以当有多个字符时,我不得不转义任何字符:'[^ a-zA-Z0-9。\\ - \\ @ \\ _] +'等等?没有更优雅的方式吗? – membersound 2015-02-23 16:29:17

+1

是的,你不能逃避那些不需要被转义的东西,比如'@'和'_',或者你可以把'\ Q'和'\ E'放在相关的字符周围来逃避它们:'' “[^ a-zA-Z0-9。\\ Q - @ _ \\ E] +”' – 2015-02-23 16:34:20

0

你的意思是像StringUtils.replacePattern(input, "[^a-z\.\-]+", ""); - 即使我不确切是否StringUtils使用特殊的RegEx语法。

1

你可以否定你的表达;

\p{Alnum} 

通过将其放置在一个消极的性格类:

[^\p{Alnum}] 

,将匹配任何非字母数字字符,然后你可以取代那些""。如果你想允许其他字符你可以把它们添加到字符类,例如:

[^\p{Alnum}\s] 

不会匹配空格字符(\s)。

如果你在哪里更换

[^\p{Alnum}.;-] 

"",这些字符也将被允许:.;-

+0

当您将Q..E换行时, – membersound 2015-02-24 08:07:38

0

StringUtils使用Java的标准Pattern类。如果你不希望导入Apache的图书馆,并希望它跑得快一点(因为它没有它的每次使用编译正则表达式),你可以这样做:

private static final Pattern NO_ODD_CHARACTERS = Pattern.compile("[^a-zA-Z0-9.\\-;]+"); 

... 

String cleaned = NO_ODD_CHARACTERS.matcher(input).replaceAll(""); 
相关问题