我正在尝试提取文本文件中的所有数字,但日期和总计更改中的数字除外。我目前有这个正则表达式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演示。正则表达式详细信息:
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+(?:,\d+)?)', text) if x]
print(results)
# => ['0', '-2,872', '-18', '898', '870', '-200', '-2,819', '-311', '-112', '0', '2', '0', '-778', '-388']
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句