确实需要有一些东西可以让不到50+代表点的用户发表评论,因为这个线程是我非常好奇的,我想放弃,但不想给出一个完整的答案,因为我给出的答案涉及有限的情况,而不是存在。
@威克托斯特里比奥
您的解决方案错过了基于您的演示的输出的“ref.”部分。看来他想跳过“电车”
@将死
在您想要的输出中,您需要编辑它,因为“uv1234”不会出现在您发布的字符串中的任何位置
.
不管怎样,我找到了一个解决办法,但我真的希望有人能在这方面有所改进。
>>> import re
>>> string = '''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'''
>>> re.findall('(?:(Expedien[\s]+N\S|Ref\.(?!:[\S\s]{,11}Expedien)|Reference|Expedien))[\S\s]*?([A-Z\-]*(?:[\d]+)[\S]*)', string)
[('Expedien', '1-21-212-16-26'), ('Reference', 'RE9833'), ('Ref.', '1234567'), ('Expedien N\xb0', '18-00777'), ('Expedien N\xb0', '18-0022995')]
缺点:
-
要正确捕捉,它部分依赖于“ref.(?!:[\s\s]{,11}权宜之计“
-
首先,需要对“11”进行编辑,以考虑可能存在的其他长度的信息,因此它不灵活
-
其次,如果它后面跟“reference”相反,那么第三个“ref”将被错误地捕获