这是输入字符串:
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
对于其他字符串: 这段代码有效,但是我也想获取一个单词是否由数字组成并且我想在匹配之后找到该数字(单词-数字在列表中作为一个实体出现),因此在这种情况下:
获取输出('Expedien','N0'),但预期输出为('Expedien N0','18 -00232995')。
获取其他实体的代码如下:
import re
s="""your_text_here"""
my_list = ['Ref.:', 'Reference', 'tramite', 'Expediente', 'Expediente No', 'Expedien N°', 'Exp.No', 'Expedien', 'Expedien N0']
rx = r'(?<!\w)({})\W*([A-Z]*\d+(?:-+[A-Z]*\d+)*)'.format('|'.join(map(re.escape,my_list)))
print(re.findall(rx, s))
输出:
[('Expedien', '1-21-212-16-26'), ('Reference', 'RE9833'), ('tramite', '1234567'), ('Expedien N°', '18-00777'), ('Expedien N°', '18-0022995')]
如何通过操纵上述正则表达式来获取(“ Expedien N0”,“ 18-00232995”)此输出
答案 0 :(得分:1)
您需要进行一些小的更改才能获得所需的输出。在您的
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
在第二组中匹配,并且没有匹配范围{ {1}},稍后再说。因此,如果您只是更改列表中的顺序并将Expedien N0
放在Expedien N0
之前,那么Expedien
会与第一组匹配,而Expedien N0
将在第二组中被捕获,并为您提供所需的结果。检查下面修改过的python代码,
18-00232995
打印
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))