Регулярное выражение, чтобы соответствовать, если все данные слова находятся в строке

В версии для Windows (вероятно, в Linux также), можно дергать в систему, скопировать/вставить буферизуют использование "*y (т.е. предыдущий команда рывка с двойными кавычками и звездочкой).

можно тогда обычно удалять заменимые строки и вставлять скопированный текст с помощью "*p.

5
задан Mark A. Nicolosi 4 July 2009 в 15:20
поделиться

3 ответа

Попробуйте упреждающие утверждения:

(?=.*one)(?=.*two)(?=.*three)

Но было бы лучше, если бы вы использовали три отдельных регулярных выражения или более простые операции поиска по строкам.

6
ответ дан 13 December 2019 в 22:14
поделиться

Проведите три отдельных сопоставления.

Единственная причина сделать это за одно - это если вам нужно найти их в определенном порядке.

2
ответ дан 13 December 2019 в 22:14
поделиться

В этом нет ничего хорошего. Вы можете довольно легко сопоставить три вхождения любого из задействованных слов:

(?:\b(?:one|two|three)\b.*){3}

, но это соответствует «один, один, один» так же легко, как «один, два, три».

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

(?\bone\b.*\btwo\b.*\bthree\b|\btwo\b.*\bone\b.*\bthree\b|\bone\b.*\bthree\b.*\btwo\b|\bthree\b.*\bone\b.*\btwo\b|\bthree\b.*\btwo\b.*\bone\b|\btwo\b.*\bthree\b.*\bone\b)

, что явно ужасно.

Короче говоря, намного лучше провести три отдельных совпадения.

2
ответ дан 13 December 2019 в 22:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: