Python重新提取某个单词后面几个字母的数字

2024-10-02 20:32:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文本文件如下。它包含包含诸如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和碰撞责任索赔是由同一事故引起的,则上述PA和碰撞责任项下的总免赔额不得超过150000欧元。ICE免赔额为附加免赔额。XX ABP金额100000欧元。最小铺设上涨0.15%

W.e.f.23.05.14 G.A.增至500000美元

“阿里昂号”、“赫斯蒂亚号”、“迪利亚号”、“内斯特号”、“忒拜号”、“忒修斯号”和“宙斯号”拥有20万美元,其余船队拥有50万美元

两个充电站价值1500000欧元,包含在价值中(见成交通知)XX ABP金额50000欧元。你知道吗

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

特别条款25万美元

python文本挖掘


Tags: rematchline金额责任条款价值文本文件
2条回答

从你的例子看来,你可能有美元|欧元|挪威克朗之前或之后,你想提取的数字金额。此外,同一行中可能有多个模式。你知道吗

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

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

例如

# 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是一个包含所有已识别数字模式的列表。你知道吗

您可以使用以下代码:

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

希望这就是你要找的

相关问题 更多 >