簡體   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