我想从字符串中除去某些非字母数字字符,但某些字符除外。如何删除任何非字母数字字符?
StringUtils.replacePattern(input, "\\p{Alnum}", "");
如何我还可以排除那些特定的字符,如.-;
?
我想从字符串中除去某些非字母数字字符,但某些字符除外。如何删除任何非字母数字字符?
StringUtils.replacePattern(input, "\\p{Alnum}", "");
如何我还可以排除那些特定的字符,如.-;
?
使用不操作^
:
[^a-zA-Z0-9.\-;]+
这意味着 “匹配究竟是不是这些字符”。所以:
StringUtils.replacePattern(input, "[^a-zA-Z0-9.\\-;]+", "");
不要忘记正确逃生需要转义字符:您需要使用两个反斜杠\\
因为你的正则表达式是Java字符串。
所以当有多个字符时,我不得不转义任何字符:'[^ a-zA-Z0-9。\\ - \\ @ \\ _] +'等等?没有更优雅的方式吗? – membersound 2015-02-23 16:29:17
是的,你不能逃避那些不需要被转义的东西,比如'@'和'_',或者你可以把'\ Q'和'\ E'放在相关的字符周围来逃避它们:'' “[^ a-zA-Z0-9。\\ Q - @ _ \\ E] +”' – 2015-02-23 16:34:20
你的意思是像StringUtils.replacePattern(input, "[^a-z\.\-]+", "");
- 即使我不确切是否StringUtils使用特殊的RegEx语法。
你可以否定你的表达;
\p{Alnum}
通过将其放置在一个消极的性格类:
[^\p{Alnum}]
,将匹配任何非字母数字字符,然后你可以取代那些""
。如果你想允许其他字符你可以把它们添加到字符类,例如:
[^\p{Alnum}\s]
不会匹配空格字符(\s
)。
如果你在哪里更换
[^\p{Alnum}.;-]
与""
,这些字符也将被允许:.
,;
或-
。
当您将Q..E换行时, – membersound 2015-02-24 08:07:38
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("");
http://docs.oracle。 com/javase/7/docs/api/java/util/regex/Pattern.html – 2015-02-23 16:19:32
你还需要支持unicode字符吗? – anubhava 2015-02-23 16:42:56