Python - как получить совпадающие текстовые совпадения в регулярных выражениях
Я использую следующее, чтобы получить все совпадения, включая перекрытие в соответствии с рекомендациями для других потоков:
[(m.start(0), m.end(0)) for m in re.findall(t,s,overlapped = True)]
где t это подмножество s. Однако я получаю следующую ошибку:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: findall() got an unexpected keyword argument 'overlapped.'
Что я делаю не так / перекрывается устаревшим флагом / как бы вы это сделали? Вся помощь очень ценится.
1 ответ
Как упоминали Каннингем и Клаус, флаг, на который я ссылаюсь, прибывает из другого пакета, который не является ре.
Я нашел решение, не загружая внешний пакет, хотя, используя lookahead:
[(m.start(0), m.end(0)) for m in re.finditer('(?='+t+')',s)]
Когда s = 'GATATATGCATATACTT' и t = 'ATAT', вы получите [(1, 1), (3, 3), (9, 9)]. Мне не нужно возвращать текст в совпадении, только индексы, поэтому не имеет значения, соответствует ли он ['','',''].