我有一个文本文件如下。它包含的行包括诸如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
答案 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
是包含所有已识别数字模式的列表。