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

标签 python regex regex-group

我有如下文字-

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/

相关文章:

python - Shebang 指向特定的 virtualenv - 这是个好主意吗?

java - JAVA 的正则表达式获取可选组

Python错误TypeError : must be string or buffer,不是实例

javascript - 如何在 MailChimp API v3.0 中为事件分配模板?

regex - 在excel字符串中从右侧提取第一个 float

php preg_match 只匹配数字、字母和点

regex - 我对正则表达式有些担心

正则表达式查询(匹配单词之前的第二个实例)

regex - Nginx 位置正则表达式,是否需要转义正斜杠?

python - 为什么在 Tensorflow/keras 作业下只有一对 GPU 的 GPU 利用率不为零?