如何在python中某个单词之后提取字符串?

时间:2018-12-11 14:02:08

标签: python regex

我试图在字符串中获取参考号,在大多数情况下以“ Ref”开头。或类似的东西。

例如:

  

Explorer II Ref.16570盒

regex with further examples

问题在于,由于这是用户生成的内容,因此存在许多不同的版本1。如何使用以python为中心的python检索数字Ref.

数字/字符串并不总是相同的模式,例如数字。它们可能混有字符,点和斜杠,但对于人眼来说,几乎每行中都可以识别出这样的数字。

例如:

Ref.16570
Ref. 16570
Referenz 216570
Referenz 01 733 7653 4159-07 4 26
331.12.42.51.01.002
166.0173
AB012012/BB01
Ref. 167.021
PAM00292
14000M
L3.642.4.56.6
161.559.50
801
666
753
116400GV
Ref.: 231.10.39.21.03.002
3233
Ref: 233.32.41.21.01.002
T081.420.97.057.01
16750
... almost each line in the example provided contains a certain ID

少量误报将不是问题。

3 个答案:

答案 0 :(得分:1)

不确定是否需要matchextract,但是Ref\.?([ \d.]+)将提取Ref之后的任何数字(不区分大小写),即:

import re
result = re.findall(r"Ref\.?([ \d.]+)", subject, re.IGNORECASE | re.MULTILINE)

['16570', '16570', '167.021', '3527']

Regex Demo
Python Demo


正则表达式说明
enter image description here

答案 1 :(得分:0)

答案 2 :(得分:0)

尝试以下代码。它收集Ref之后直到其中一个预定义的塞子之前的所有数据。之所以使用塞子,是因为该问题并未明确定义所引用的数据(not always the same patternmight be mixed withfor a human eye there is almost always)。我猜需要对匹配进行更多处理才能更准确地提取实际参考。

import re

ref_re = re.compile('(?P<ref_keyword>Referenz|Ref\.|Ref)[ ]*(?P<ref_value>.*?)(?P<ref_stopper> - | / |,|\n)')

with open('1.txt', mode='r', encoding='UTF-8') as file:
    data = file.read()

for match in ref_re.finditer(data):
    print('key:', match.group('ref_keyword'))
    print('value:', match.group('ref_value'))
    # print('stopper:', match.group('ref_stopper'))

输出从以下几行开始:

key: Ref.
value: 16570 Box&Papiere mit Revision
key: Ref.
value: 16570 Box&Papiere mit Revision
key: Referenz
value: 216570 mit schwarzem Zifferblatt 
key: Referenz
value: 01 733 7653 4159-07 4 26 34EB 
key: Ref.
value: 167.021
key: Ref.
value: 3527
key: Referenz
value: 01 733 7653 4159-07 4 26 34EB
key: Ref.
value: 16570 Box&Papiere mit Revision