[英]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
,您只需要从结果列表中删除空项目。
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.