Regex - поиск строки, которая встречается в другой строке каждые n (фиксированных) символов - PullRequest
1 голос
/ 08 марта 2019

Название моего вопроса, вероятно, неясно, поэтому я попытаюсь объяснить с помощью нескольких примеров, чтобы лучше объяснить

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

Мы хотим найти мир "привет" в этой строке:

"h..e..l..l..o......"

Обратите внимание, как он повторяется каждые 2 символа

Мне удалось создать простое правило регулярных выражений для этого следующим образом:

"h.{2}e.{2}l.{2}l.{2}o"

Однако это работает только один раз каждые 2 шага, я хотел, чтобы любое количество шагов (или, по крайней мере, сказать до5) - так, чтобы она также соответствовала строке вроде:

"h...e...l...l...o"

То, что я пробовал:

"h.{1,5}e.{1,5}l.{1,5}l.{1,5}o"

Однако это не фиксирует число во всех диапазонах, так сказать этоСтрока будет проходить, даже если она не появляется через фиксированные интервалы:

"h..e..l.l..o"

Обратите внимание на один символ между 2 л.Моя единственная другая мысль - использовать цикл для повторения от 1 до 5 и пробовать все это как отдельные операторы регулярных выражений, но было бы полезно попробовать задать вопрос, чтобы посмотреть, есть ли какие-нибудь изящные способы сделать это с помощью регулярных выражений:)

Спасибо за любые ответы

Ответы [ 2 ]

3 голосов
/ 08 марта 2019

Я предлагаю использовать группу захвата и обратную ссылку для этого:

h(\.{1,5})e\1l\1l\1o

RegEx Demo

Здесь (\.{1,5}) после первой буквы h будетсопоставьте от 1 до 5 точек и выполните захват в группе № 1.После этого мы используем обратную ссылку # 1, т.е. \1 между каждым символом, чтобы убедиться, что мы сопоставляем одинаковое количество точек между всеми буквами.

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

Попробуйте ''.join(re.findall(r"[a-zA-Z]",text)), если вы хотите извлечь из текста только алфавиты, а это одно слово.

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