首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式返回所有匹配事件。

正则表达式返回所有匹配事件。
EN

Stack Overflow用户
提问于 2020-08-12 15:00:15
回答 2查看 1.4K关注 0票数 1

我收到的短信如下-

02052020 02:40:02.445: Vacation Allowance: 21; nnnnnn Vacation Allowance: 22;nnn

我想在Python中提取下面的内容-

代码语言:javascript
复制
Vacation Allowance: 21
Vacation Allowance: 22

基本上,我想提取所有出现的“休假津贴:”和后面的数值这个后缀;

我用了下面的正则表达式-

代码语言:javascript
复制
(.*)(Vacation Allowance:)(.*);(.*)

完整的Python代码如下-

代码语言:javascript
复制
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)

这并不是所有事件都会出现,而是只会出现最后一次事件。目前的输出是-

代码语言:javascript
复制
Vacation Allowance: 22

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-13 01:48:20

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

建议匹配类似Vacation Allowance:\s*\d+;或类似的东西。

代码语言:javascript
复制
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']

票数 1
EN

Stack Overflow用户

发布于 2020-08-12 15:21:02

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

您需要全局属性g

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63379307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档