Регулярное выражение для последовательных повторяющихся слов - PullRequest
97 голосов
/ 13 мая 2010

Я новичок в регулярных выражениях, и я не могу понять, как написать одно регулярное выражение, которое бы "соответствовало" любым повторяющимся последовательным словам, таким как:

Париж в Весне .

Не что это связано.

Почему ты смеешься? my my регулярные выражения, что плохо ??

Существует ли единственное регулярное выражение, которое будет соответствовать ВСЕМ жирным строкам выше?

Ответы [ 13 ]

0 голосов
/ 11 марта 2019

Выражение ниже должно работать правильно, чтобы найти любое количество последовательных слов. Соответствие может быть без учета регистра.

String regex = "\\b(\\w+)(\\s+\\1\\b)*";
Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);

Matcher m = p.matcher(input);

// Check for subsequences of input that match the compiled pattern
while (m.find()) {
     input = input.replaceAll(m.group(0), m.group(1));
}

Пример ввода: До свидания, до свидания GooDbYe

Пример вывода: до свидания

Объяснение:

Регулярное выражение:

\ b: начало границы слова

\ w +: любое количество символов слова

(\ s + \ 1 \ b) *: любое количество пробелов, за которыми следует слово, которое соответствует предыдущему слову и заканчивается границей слова. Вся вещь, завернутая в *, помогает найти более одного повторения.

Группировка:

m.group (0): должна содержать совпадающую группу в указанном выше случае. До свидания, до свидания

m.group (1): должно содержать первое слово сопоставленного шаблона в вышеприведенном случае. До свидания

Метод замены должен заменить все последовательные совпадающие слова на первый экземпляр слова.

0 голосов
/ 05 июля 2018

Regex to Strip 2+ повторяющиеся слова (последовательные / непоследовательные слова)

Попробуйте это регулярное выражение, которое может поймать 2 или более повторяющихся слова и оставить только одно слово. И повторяющиеся слова даже не обязательно должны быть последовательными .

/\b(\w+)\b(?=.*?\b\1\b)/ig

Здесь \b используется для границы слова, ?= используется для позитивного просмотра, а \1 используется для обратной ссылки.

Пример Источник

0 голосов
/ 16 августа 2016

Используйте это, если вы хотите, чтобы проверка на наличие повторяющихся слов проводилась без учета регистра.

(?i)\\b(\\w+)\\s+\\1\\b
...