【发布时间】:2017-05-04 21:05:25
【问题描述】:
是否可以解析下面两封电子邮件中的所有“权重”?
我需要一个足够强大的正则表达式来捕获仅这两封电子邮件的“权重”,以及 100 多封电子邮件。我现在使用的 RegEx 搜索逗号并获取它们两边的数字,这非常适合以千计的重量,但无法捕获低于 1000 的重量,例如下面的 954lbs 和 800lbs 值。
我想也许我可以尝试识别“lbs”并捕获其前面的数字,但在某些情况下价格在“lbs”之前。
任何帮助将不胜感激,谢谢大家。
1) Subject: FW: NEFS 11 fish for lease
From: Claire Fitz-Gerald
Date: 11/15/2013 3:02 PM
NEFS 11 has the following fish for lease:
-GOM Cod up to 5,000 lbs (live wt) @ 1.40 lbs
-American Plaice 2,000 lbs .60 lbs or best offer
2) From: Claire Fitz-Gerald
Date: 9/5/2014 9:52 AM
Subject: NEFS 5 Available Fish
All,
NEFS 5 has the following fish available for lease/trade:
GB EAST cod: 954 lbs @ $0.83
GB EAST cod: 1,046 lbs to trade for 1,830 lbs GB WEST cod
GB blackback: 30,000 lbs @ $0.07
GOM blackback: 800 lbs @ $0.03
white hake: 6,322 lbs @ $0.13
pollock: 22,000 lbs @ $0.015
redfish: 14,000 lbs @ $0.015
GB yt: 1,873 lbs @ $1.13
GB yt: 5,127 lbs to trade for 10,254 lbs SNE yt
我的相关代码:
with open(file_path, 'r') as f:
pattern = re.compile(r'\d+,\d+ ')
email = f.read()
weights = pattern.findall(email)
data_frame['Weights'].append(weights)
if weights:
print("Weight:", ''.join(weights))
打印输出,用于电子邮件 #2:(注意不包括小于 1000 的金额)
Weight: 1,046 1,830 30,000 6,322 22,000 14,000 1,873 5,127 10,254
【问题讨论】:
-
我在你的模式中看不到
'lbs',但无论如何你可以允许一个逗号与r'(\d+,)?\d+ '之类的东西。 -
我的代码已经成功识别逗号和周围的数字。我要问的是一种不同的方式(或另一种方式)来捕获小于 1,000 的重量值,因此没有逗号。
-
我在之前的评论中写道“要么是数字流,要么是带有单个逗号的数字流”。这不是你需要的吗?
-
这个怎么样:
\s([\d,]+)\s*lb它捕获所有数字和逗号,前面有一个空格,后面是一些空格,后面是lbregex101.com/r/Tpy0So/1 -
对行首的良好观察。
*匹配零个或多个空格,因此接受40000lbs。这是一个更新的正则表达式(?<!\.)([\d,]+)\s*lbregex101.com/r/Tpy0So/2