正则表达式将两个(或者多个)连续字符替换为一个?
时间:2020-03-06 14:28:05 来源:igfitidea点击:
在Java中,可以使用正则表达式替换这些正则表达式,
例如:
前:
aaabbb
后:
b
前:
14442345
后:
142345
谢谢!
解决方案
在Perl中
s/(.)+//g;
可以做到这一点,我假设如果Java具有与Perl兼容的正则表达式,它也应该可以工作。
编辑:这是什么意思
s {
(.) # match any charater ( and capture it )
# if it is followed by itself
+ # One or more times
}{}gx; # And replace the whole things by the first captured character (with g modifier to replace all occurences)
编辑:正如其他人指出的那样,Java中的语法将成为
original.replaceAll("(.)\1+", "");
记住要逃避\ 1
String a = "aaabbb";
String b = a.replaceAll("(.)\1+", "");
System.out.println("'" + a + "' -> '" + b + "'");
"14442345".replaceAll("(.)\1+", "");
originalString.replaceAll( "(.)\1+", "" );
在TextEdit中(假设posix表达式)
找到:[a] + [b] +
替换为:ab
匹配模式(在Java /语言中,必须转义):
(.)\1+
或者(在可以使用不将\当作转义符的字符串的语言中)
(.)+
替换:
在Perl中:
tr/a-z0-9//s;
例子:
$ perl -E'@a = (aaabbb, 14442345); for(@a) { tr/a-z0-9//s; say }'
ab
142345
如果Java没有tr类似物,则:
s/(.)+//sg; #NOTE: `s` modifier. It takes into account consecutive newlines.
例子:
$ perl -E'@a = (aaabbb, 14442345); for(@a) { s/(.)+//sg; say }'
ab
142345

