为了账号安全,请及时绑定邮箱和手机立即绑定

从文本文件中提取数字,不包括日期

从文本文件中提取数字,不包括日期

幕布斯6054654 2021-06-04 14:12:41
我有从文本文件中提取数字的简单代码。它看起来像这样: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


查看完整回答
反对 回复 2021-06-15
?
动漫人物

TA贡献1815条经验 获得超10个赞

考虑到文本示例,我假设每个价格都以 $ 符号开头,在这种情况下,您可能正在寻找以下正则表达式:

r"(?<=\$)\d+\.?\d*(?= )"

结果将是:

['80.38', '20.25', '218.67']

或者,如果您想要列表中的 $ 符号,则正则表达式将是:

r"\$\d+\.?\d*(?= )"

在这种情况下的结果:

['$80.38', '$20.25', '$218.67']

澄清一下,(?<=\$)意味着我们的匹配需要通过 $ 符号进行,但 $ 符号不会添加到输出中。(?= ) 表示价格后面应该跟空格。


查看完整回答
反对 回复 2021-06-15
  • 3 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信