2016-10-26 2 views
0

Начиная со следующей строки:Регулярное выражение не жадный слово захвата

и worda1 worda2 ... wordan и wordb1 wordb2 ... wordbn

и ... не является буквальным, но означает, что могут быть и другие слова. И слова могут быть ничего, кроме «и».

Я хотел бы, чтобы захватить

wordb1 wordb2 wordbn

Проблема с регулярным выражением х я написал до сих пор, что я использовал \ ш, которые затем соответствует «и» и приводит к жадному захвату. Lookahead и lookbehind не работают ни из-за произвольного количества слов, которые нужно захватить.

Edit: вот пример:

и все пошли в парк, и никто не был оставлен дома

должен захватить:

никто не был оставлен дома

Регулярное выражение не может содержать твердую кодировку ase «никто не остался дома», потому что ему нужно захватить любую произвольную последовательность слов, отличную от «и».

Еще лучше:

и это было утро, и все пошли в парк, и никто не был оставлен дома

должны захватить:

никто остался дома

Большая картинка: d хотелось только захватить только до первого «и», начиная с правой.

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

Я использую Python re, но открыт для других вариантов регулярных выражений.

Спасибо за любую помощь.

+0

Не совсем уверен, что ваш вопрос пока еще .... Может ли регулярное выражение, которое вы ищете, было бы так же просто, как захватить все слова после второго «и»? Если нет, можете ли вы подробнее объяснить, что делаете. –

+1

Не могли бы вы сформулировать требования? Сопоставьте последовательные слова с числовым суффиксом, который последовательно увеличивается? Тогда никакое регулярное выражение не поможет. –

+0

Что вы подразумеваете под словом 'word', если это буквальная строка, которую вы могли бы использовать' word \ d * ' –

ответ

0

Это следует сделать это:

/(?:.* and)?(.+)/ 

Обратите внимание, что это соответствует всей линии, но захватили матч будет часть, которую вы хотите. Рабочий пример: here.

Есть несколько предостережений, хотя:

  1. Это предполагает, что есть одна фраза в каждой строке.
  2. Это будет соответствовать целой строке, если в ней нет слова «и». Возможно, это то, чего вы хотите.
  3. Это предполагает, что самым первым словом строки является не 'и'.
  4. Это также предполагает, что последнее слово строки не является «и».
+0

Это потрясающе - спасибо! – user3750352