Регулярное выражение от фразы до конца документа с условием - PullRequest
0 голосов
/ 03 мая 2019

У меня есть начальная фраза: fruits.У меня есть некоторые конечные фразы, такие как apple, banana и pineapple.

У меня есть некоторые документы с переменной как text:

  1. Фрукты

    Они полезны для здоровья ....

    следует употреблять яблоко

  2. Фрукты

    ешьте регулярно банан

    фрукты, которые вам нужны

    чтобы есть яблоко

  3. фрукты хороши

    Ежедневно мыдолжен иметь ананас

    Как правило, фрукты содержат различные минералы.

    Большинство из них очень вкусные

My Regex икод:

p = r'(\bFruits\b\s*\w*\s*\n*.*?(\bApples?\b|\bbananas?\b|\bpineapples?\b))'
sep = ";;"
lst = re.findall(p, text, re.I|re.M|re.DOTALL)
val = sep.join(str(v) for v in lst )

Вышеупомянутое регулярное выражение хорошо работает в text 1 & 2 и частично в text 3.

Задача :

Все, что мне нужно, - это когда мы сталкиваемся с фруктами и не находим ни одной из конечных фраз, тогда и только тогда до конца документа.

Ожидаемый результат от text 3 :

Fruits are good Daily we should have pineapple ;; fruits have various minerals.
Most of them are very tasty

PS : я тоже пробовал $, ноэто тоже не сработало.

1 Ответ

1 голос
/ 03 мая 2019

включает \Z в следующем выражении

text = '''Fruits are good

Daily we should have pineapple

In general, Fruits have various minerals.

Most of them are very tasty
'''

p = r'(\bFruits\b\s*\w*\s*\n*.*?(\bApples?\b|\bbananas?\b|\bpineapples?\b|\Z))'
sep = ";;"
lst = re.findall(p, text, re.I|re.M|re.DOTALL)
val = sep.join(str(v) for v in lst )
print(val)

вывод выглядит следующим образом

('Fruits are good\n\nDaily we should have pineapple', 'pineapple');;('Fruits have various minerals.\n\nMost of them are very tasty\n', '') [Finished in 0.1s]

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