Вы сказали, что слова разделены случайным количеством пробелов и / или знаков препинания, для этого я использовал [\s\.]+
.
что вы делаете неправильно, так это то, что вы употребляете второе слово,Вам нужен позитивный взгляд, который соответствует второму слову, но не употребляет его, поэтому он будет соответствовать ему в следующий раз.и поскольку вы сказали, что это массивный текст, я думаю, что использование finditer
лучше, чем findall
, разница в том, что он возвращает генератор, который выдает те же элементы, которые возвращает findall
:
import re
text ="""This. is a random text"""
pattern = re.compile(r'(\w+[\s\.]+)(?=(\w+))')
for match in pattern.finditer(text):
# rebuild the word
element = ''.join(match.groups())
print(element)
Ouput:
This. is
is a
a random
random text
Обратите внимание, что по умолчанию положительный прогноз не является группой захвата, поэтому я сделал это (?=(\w+))
, чтобы захватить слово внутри него.Первая группа - (\w+[\s\.]+)
.и я использовал join
для повторного построения конкатенации групп.