返回所有匹配项的正则表达式

2024-06-16 18:21:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有如下文本-

02052020 02:40:02.445: Vacation Allowance: 21; nnnnnn Vacation Allowance: 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

你能评论一下我如何提取所有事件吗


Tags: 代码text文本importre事件数字后缀
2条回答

问题在于所使用的正则表达式。 (.*)块接受的字符串比您意识到的要多-.*被称为贪婪操作,它将在仍然匹配的情况下消耗尽可能多的字符串。这就是为什么您只看到一个输出

建议匹配类似Vacation Allowance:\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']

在Javascript中是'text'.match(/\bVacation Allowance: \d+/g)

您需要全局属性g

相关问题 更多 >