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

我有从文本文件中提取数字的简单代码。它看起来像这样:


import re

codata = []

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, 2018

8/31/2018

8/31/18

August 2018

FY2018

CY2018

fiscal year 2018

calendar 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"。如果我知道文本中与日期相关的任何数字都具有我上面概述的格式,我应该如何修改我的代码以获得所需的输出?


幕布斯6054654
浏览 125回答 3
3回答

holdtom

很难准确理解你想要什么。但是如果你只是在寻找数字,你可以这样做(如果它有小数,请改用浮点数)。import recodata = []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

动漫人物

考虑到文本示例,我假设每个价格都以 $ 符号开头,在这种情况下,您可能正在寻找以下正则表达式:r"(?<=\$)\d+\.?\d*(?=&nbsp;)"结果将是:['80.38',&nbsp;'20.25',&nbsp;'218.67']或者,如果您想要列表中的 $ 符号,则正则表达式将是:r"\$\d+\.?\d*(?=&nbsp;)"在这种情况下的结果:['$80.38',&nbsp;'$20.25',&nbsp;'$218.67']澄清一下,(?<=\$)意味着我们的匹配需要通过 $ 符号进行,但 $ 符号不会添加到输出中。(?= ) 表示价格后面应该跟空格。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python