我有如下文字-
02052020 02:40:02.445:假期津贴:21; nnnnnn 假期津贴:22;nnn
我想用 Python 提取以下内容-
Vacation Allowance: 21
Vacation Allowance: 22
基本上,我想提取所有出现的“假期津贴:”及其后缀为 ; 的数值
我正在使用下面的正则表达式-
(.*)(Vacation Allowance:)(.*);(.*)
下面是完整的 Python 代码-
import re
text = '02/05/2020 Vacation Allowance: 21; 02/05/2020 Vacation Allowance: 22; nnn'
pattern = re.compile(r'(.*)(Vacation Allowance:)(.*);(.*)')
for (a,b,c,d) in re.findall(pattern, text):
print(b, " ", c)
这并不给出所有出现的情况,而是仅给出最后一次出现的情况。当前输出是-
Vacation Allowance: 22
您能否评论一下我如何提取所有出现的情况?
最佳答案
问题出在所使用的正则表达式上。
(.*)
block 接受的字符串比您意识到的要多 - .*
被称为贪婪操作,它将消耗尽可能多的字符串可以同时仍然匹配。这就是为什么您只能看到一个输出。
建议匹配诸如假期津贴:\s*\d+;
或类似内容。
text = '02/05/2020 Vacation Allowance: 21; 02/05/2020 Vacation Allowance: 22; nnn'
m = re.findall('Vacation Allowance:\s*(\d*);', text, re.M)
print(m)
结果:['21', '22']
关于python - 正则表达式返回所有匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63379307/