您可以匹配不受欢迎的字符串,并使用 有史以来最好的正则表达式技巧匹配并捕获所有其他上下文中的数字:
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 获得结果后,您只需从结果列表中删除空项即可。
Python demo:
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']