从文本文件中提取数字

田恩:

我正在尝试提取文本文件中的所有数字,但日期总计更改中的数字除外我目前有这个正则表达式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
威克多·史翠比维(WiktorStribiżew):

您可以使用有史以来最佳的正则表达式技巧匹配不受欢迎的字符串,并在所有其他情况下匹配并捕获数字

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

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

  • Total Change is:\s*\S+- Total Change is:,零个或多个空格,一个或多个非空格字符
  • | - 要么
  • Changes from:.*?\d{4}\b- Changes from:,除换行符以外的零个或多个字符应尽可能少,四位数字和一个单词边界
  • | - 要么
  • ([-+]?\d+(?:,\d+)?)-第1组(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']

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章