регулярное выражение для замены двух (или более) последовательных символов только одним? - PullRequest
19 голосов
/ 20 сентября 2008

В Java, какое регулярное выражение может быть использовано для замены, например:

перед: aaabbb после: аб

перед: 14442345 после: 142345

спасибо!

Ответы [ 8 ]

34 голосов
/ 20 сентября 2008

В perl

s/(.)\1+/$1/g;

Делает трюк, я полагаю, если java имеет регулярные выражения, совместимые с perl, он тоже должен работать.

Редактировать: вот что это значит

s {
    (.)  # match any charater ( and capture it )
    \1   # if it is followed by itself 
    +    # One or more times
}{$1}gx;  # And replace the whole things by the first captured character (with g modifier to replace all occurences)

Редактировать: Как уже указывали другие, синтаксис в Java станет

original.replaceAll("(.)\\1+", "$1");

не забудьте убежать от \ 1

16 голосов
/ 20 сентября 2008
String a = "aaabbb";
String b = a.replaceAll("(.)\\1+", "$1");
System.out.println("'" + a + "' -> '" + b + "'");
3 голосов
/ 20 сентября 2008
"14442345".replaceAll("(.)\\1+", "$1");
2 голосов
/ 20 сентября 2008
originalString.replaceAll( "(.)\\1+", "$1" );
1 голос
/ 20 сентября 2008

шаблон сопоставления (в Java / языках, где \ должен быть экранирован):

(.)\\1+

или (в языках, где вы можете использовать строки, которые не рассматриваются в качестве escape-символа)

(.)\1+ 

замена :

$1
0 голосов
/ 02 июля 2014

Сахар с Java 7: Именованные группы

static String cleanDuplicates(@NonNull final String val) { 
      assert val != null;
      return val.replaceAll("(?<dup>.)\\k<dup>+","${dup}");
}
0 голосов
/ 21 сентября 2008

В Perl:

tr/a-z0-9//s;

Пример:

$ perl -E'@a = (aaabbb, 14442345); for(@a) { tr/a-z0-9//s; say }'
ab
142345 

Если у Java нет tr аналога, то:

s/(.)\1+/$1/sg; 
#NOTE: `s` modifier. It takes into account consecutive newlines.

Пример:

$ perl -E'@a = (aaabbb, 14442345); for(@a) { s/(.)\1+/$1/sg; say }'
ab
142345 
0 голосов
/ 20 сентября 2008

в TextEdit (при условии выражения posix) найти: [a] + [b] + заменить на: ab

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...