我有从文本文件中提取数字的简单代码。它看起来像这样:import recodata = []with open(r"filename.txt") as file: for line in file: for i in re.findall(r'\d+(?:\.\d+)?', line): codata.append(i)文本包含很多财务数据和很多我不想要的日期。有没有一种简单的方法可以修改代码以排除日期?日期通常遵循这些格式(我使用特定日期作为格式示例,但它可以是任何日期):August 31, 20188/31/20188/31/18August 2018FY2018CY2018fiscal year 2018calendar year 2018这是一个例子。我有一个包含以下文本的文本文件:“就本节所述的财务分析而言,“隐含的合并对价”一词是指交易中规定的每股对价的隐含价值 80.38 美元,包括 20.25 美元的对价现金部分和隐含价值根据 XXX 2018 年 7 月 14 日每股 218.67 美元的收盘价计算的 0.275 股 XXX 普通股的股票部分。”当我运行我上面发布的代码时,我从print(codata)以下位置得到这个输出:['80.38', '20.25', '0.275', '218.67', '14', '2018']我想得到这个输出:['80.38', '20.25', '0.275', '218.67']所以我不想拿起与 date 相关的数字 14 和 2018 "July 14, 2018"。如果我知道文本中与日期相关的任何数字都具有我上面概述的格式,我应该如何修改我的代码以获得所需的输出?
3 回答
holdtom
TA贡献1805条经验 获得超10个赞
很难准确理解你想要什么。但是如果你只是在寻找数字,你可以这样做(如果它有小数,请改用浮点数)。
import re
codata = []
with open(r"filename.txt") as file:
for line in file:
for i in re.findall(r'\d+(?:\.\d+)?', line):
try:
codata.append(int(i))
except:
continue
动漫人物
TA贡献1815条经验 获得超10个赞
考虑到文本示例,我假设每个价格都以 $ 符号开头,在这种情况下,您可能正在寻找以下正则表达式:
r"(?<=\$)\d+\.?\d*(?= )"
结果将是:
['80.38', '20.25', '218.67']
或者,如果您想要列表中的 $ 符号,则正则表达式将是:
r"\$\d+\.?\d*(?= )"
在这种情况下的结果:
['$80.38', '$20.25', '$218.67']
澄清一下,(?<=\$)意味着我们的匹配需要通过 $ 符号进行,但 $ 符号不会添加到输出中。(?= ) 表示价格后面应该跟空格。
添加回答
举报
0/150
提交
取消