繁体   English   中英

从文本文件中提取数字

[英]Extracting numbers from a text file

我试图提取文本文件中的所有数字,但日期Total change 中的数字除外 我目前有这个 regex 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

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

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

请参阅正则表达式演示 正则表达式详细信息:

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

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

Python 演示

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']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM