【问题标题】:Extracting numbers from a text file except numbers in specific context从文本文件中提取数字
【发布时间】:2020-12-28 16:59:49
【问题描述】:

我正在尝试提取文本文件中的所有数字除了日期中的数字和总变化。我目前有这个正则表达式pattern = re.compile(r'[-]?\d+[,]?\d+?'),它可以提取所有数字。任何人都可以建议如何将异常放入其中。

我的文本文件

Changes from:       August 18, 2020                                  Total Change is:    -3,029

         0     -2,872        -18        898        870       -200     -2,819       -311       -112          0          2          0       -778       -388

【问题讨论】:

    标签: python regex text


    【解决方案1】:

    您可以匹配不受欢迎的字符串,并使用 有史以来最好的正则表达式技巧匹配并捕获所有其他上下文中的数字:

    results = [x for x in re.findall(r'Total Change is:\s*\S+|Changes from:.*?\d{4}\b|([-+]?\d+(?:,\d+)?)', text) if x]
    

    请参阅regex demo。正则表达式详细信息:

    • Total Change is:\s*\S+ - Total Change is:,零个或多个空格,一个或多个非空格字符
    • | - 或
    • Changes from:.*?\d{4}\b - Changes from:,除换行符之外的零个或多个字符尽可能少,四位数字和一个单词边界
    • | - 或
    • ([-+]?\d+(?:,\d+)?) - 第 1 组(re.findall 仅返回这些值):可选的 +-,一个或多个数字,然后是逗号和一个或多个数字的可选序列

    使用re.findall 获得结果后,您只需从结果列表中删除空项即可。

    Python demo:

    import re
    rx = r"Total Change is:\s*\S+|Changes from:.*?\d{4}\b|([-+]?\d+(?:,\d+)?)"
    text = "Changes from:       August 18, 2020                                  Total Change is:    -3,029\n\n        0     -2,872        -18        898        870       -200     -2,819       -311       -112          0          2          0       -778       -388"
    results = [x for x in re.findall(r'Total Change is:\s*\S+|Changes from:.*?\d{4}\b|([-+]?\d+(?:,\d+)?)', text) if x]
    print(results)
    # => ['0', '-2,872', '-18', '898', '870', '-200', '-2,819', '-311', '-112', '0', '2', '0', '-778', '-388']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-01
      • 2017-06-16
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      相关资源
      最近更新 更多