Регулярное выражение Python - Как найти произвольное количество предложений после цифры?

Допустим, у нас было следующее: 1. Приговор 1. «ing:» 1. Предложение 1. Предложение 2? ». Как бы я искал (и возвращал как строку) шаблон, который соответствует всем следующим случаям:

  • "1. Sentence 1. Sentence 2? Sentence 3!"
  • pattern = re.compile("d.(s[A-O][^.!?]+[.!?])+?")
  • "1. Sentence 1. Sentence 2? Sentence 3!"

Перед шаблоном всегда есть число, но после него может быть любое количество предложений. Я пробовал до сих пор

assignmentText = "".join(pattern.findall(assignment))

а также

join

где findall-method является уродливым взломом, используемым для извлечения строки из возвращаемого списка list[0], поскольку str, похоже, не работает (я знаю, что strв списке будет только один ). Тем не менее, я только когда-либо получаю первое предложение, без цифры впереди.

Как это можно исправить?

python,regex,python-3.x,pattern-matching,

0

Ответов: 1


1 принят

Вы можете использовать (?:(?:d+.s+)?[A-Z].*?[.!?]s*)+.

import re
print(re.findall(r'(?:(?:d+.s+)?[A-Z].*?[.!?]s*)+', '1. Sentence 1. Sentence 2? Sentence 3!'))

Эти результаты:

['1. Sentence 1. Sentence 2? Sentence 3!']

Или, если вы предпочитаете разделять их на 3 разных элемента в списке:

import re
print(re.findall(r'(?:(?:d+.s+)?[A-Z].*?[.!?])', '1. Sentence 1. Sentence 2? Sentence 3!'))

Эти результаты:

['1. Sentence 1.', 'Sentence 2?', 'Sentence 3!']
Python, регулярное выражение, Python-3.х, шаблон сопоставления,
Похожие вопросы