如何解决从文本文件中提取数字
我正在尝试提取文本文件 除 中所有的数字,这些数字来自 date 和 总更改 。我目前有这个正则表达式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]
请参见regex demo。正则表达式详细信息:
-
Total Change is:\s*\S+
-Total Change is:
,零个或多个空格,一个或多个非空格字符 -
|
-或 -
Changes from:.*?\d{4}\b
-Changes from:
,除换行符以外的零个或多个字符应尽可能少,四位数字和后一个单词边界 -
|
-或 -
([-+]?\d+(?:,\d+)?)
-第1组(re.findall
仅返回这些值):一个可选的+
或-
,一个或多个数字,然后是一个可选的逗号序列和一个或多个数字
使用re.findall
获得结果后,只需从结果列表中删除空白项目即可。
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+(?:,text) if x]
print(results)
# => ['0','-2,872','-18','898','870','-200',819','-311','-112','0','2','-778','-388']
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。