Требуется небольшое изменение, чтобы получить желаемый результат. По вашему,
my_list = ['Ref.:', 'Reference', 'tramite', 'Expediente', 'Expediente No', 'Expedien N°', 'Exp.No', 'Expedien', 'Expedien N0']
Вы указали Expedien
перед Expedien N0
, из-за чего в text Expedien N0 18-00232995
текст Expedien
совпадает, а N0
совпадает во второй группе и не оставляет возможности для сопоставления Expedien N0
, как это происходит позже. Следовательно, если вы просто измените порядок в своем списке и поместите Expedien N0
перед Expedien
, тогда Expedien N0
соответствует первой группе, а 18-00232995
попадет во вторую группу и даст вам желаемые результаты. Проверьте ваш модифицированный код Python ниже,
import re
s="""text Expedien N0 18-00232995
$cat input_file
some text before Expedien: 1-21-212-16-26 some random text
Reference RE9833 of all sentences.
abc
123
456
something blah blah Ref.:
tramite 1234567
Ref.:
some junk Expedien N° 18-00777 # some new content
some text Expedien N°18-0022995 # some garbled content"""
my_list = ['Ref.:', 'Reference', 'tramite', 'Expediente', 'Expediente No', 'Expedien N°', 'Exp.No', 'Expedien N0', 'Expedien']
rx = r'(?<!\w)({})\W*([A-Z]*\d+(?:-+[A-Z]*\d+)*)'.format('|'.join(map(re.escape,my_list)))
print(rx)
print(re.findall(rx, s))
печать
[('Expedien N0', '18-00232995'), ('Expedien', '1-21-212-16-26'), ('Reference', 'RE9833'), ('tramite', '1234567'), ('Expedien N°', '18-00777'), ('Expedien N°', '18-0022995')]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ You have your intended tuple here in your findall results