Python在某个单词之后重新提取一些数字

时间:2017-07-24 10:19:33

标签: python regex

我有一个文本文件如下。它包含的行包括诸如XX或XX ABP或XYZ XYZ之类的单词。我想提取XX或XX ABP或XYZ XYZ之后的第一个数字。 XX或XX ABP或XYZ XYZ与此数量之间可能有几个单词或没有单词。而且你会理解它是一个金额,因为它来自美元或欧元或挪威克朗。例如,像XX,Cl 4.8.3.a的旅馆案例。 100000美元,我想要的是100000。

我尝试过如下代码,但我还没有得到我想要的东西。

import re
for line in open('GA_ded_notes2.txt'):
match = re.search('XX * USD (\d+)', line)
if match:
    print match.group(1)

如果PA和Collisinion Liability索赔来自同一伤亡,则上述PA和碰撞责任的免赔额不得超过150000欧元ICE免赔额是额外的免赔额。 XX ABP金额为100000欧元。最低上涨0,15%

W.e.f。 23.05.14 G.A.增加到500,000美元

Vessel Arion,Hestia,Delia,Nestor,Thebe,Thesus和Zeus拥有XX 200000美元,其余整个舰队拥有XX USD 500000美元

价值1,500,000欧元的两个充电站(见收盘建议)XX ABP金额为50000欧元。

特殊XX限制本条款下的任何一次事故不超过100000美元

特别XX条款USD 250000

python text mining

2 个答案:

答案 0 :(得分:0)

您可以使用此代码:

import re
for line in open('sample.txt'):
    match = re.findall(' .*?(USD|EUR|NOK) ([0-9,]+)', line)
    for x in match:
        print x[1]

它会打印出来:

150000
100000
500000
500000
1,500000
50000
100000
250000

希望这就是你要找的东西

答案 1 :(得分:-1)

从您的示例中可以看出,您可能在要提取的数量之前或之后有USD | EUR | NOK。此外,您可能在同一行中有多个模式。

因此,您需要使用以下代码检索每行中所有匹配的数字模式(符合您的条件):

match = re.findall('(?:XX|XYZ) .*?(?:USD|EUR|NOK)?(\d+)(?:USD|EUR|NOK)?', line)

e.g。对

# line = 'Vessel Arion, Hestia, Delia, Nestor, Thebe, Thesus and Zeus has...
# XX 200000 USD the rest of the entire fleet has XX USD 500000 USD'

match = re.findall('(?:XX|XYZ) .*?(?:USD|EUR|NOK)?(\d+)(?:USD|EUR|NOK)?', line)

# match: ['200000', '500000']                                                                           

返回值match是包含所有已识别数字模式的列表。