2015-02-23 74 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(""); 
相關問題