繁体   English   中英

为什么这个正则表达式不匹配完整的模式?

[英]Why doesn't this regex match the full patterns?

import re

patterns = re.compile(r'(yesterday|today) \d{1,2} hours \d{1,2} minutes')

matches = re.findall(patterns, 'yesterday 9 hours 32 minutes today 10 hours 30 minutes')

print(matches)

上面代码的打印 output 是:

['yesterday', 'today']

我希望它是:

['yesterday 9 hours 32 minutes', 'today 10 hours 30 minutes']

为什么它不匹配完整的模式?

您正在使用初始捕获组来指定昨天和今天之间的选择:

(yesterday|today) ——分组是对捕获组的有效使用,但在这种情况下,它会产生让您感到困惑的意外后果。

您可以通过多种方式处理此问题。 以下内容将使用 finditer 和对始终指示完整匹配文本的 .group .group(0)的引用为您提供所需的结果:

import re

patterns = re.compile(r'(yesterday|today) \d{1,2} hours \d{1,2} minutes')

matches = patterns.finditer('yesterday 9 hours 32 minutes today 10 hours 30 minutes')
for match in matches:
    print(match.group(0))

你也可以这样做:

import re

patterns = re.compile(r'(?:yesterday|today) \d{1,2} hours \d{1,2} minutes')

matches = patterns.findall('yesterday 9 hours 32 minutes today 10 hours 30 minutes')
print(matches)

这会将捕获组转换为非捕获组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM