Jam*_*iro 5 python regex python-3.x
{m,n}?
Run Code Online (Sandbox Code Playgroud)
导致结果RE匹配先前RE的m到n个重复,并尝试匹配尽可能少的重复。这是前一个限定词的非贪婪版本。例如,在6个字符的字符串'aaaaaa'上,a {3,5}将匹配5个'a'字符,而a {3,5}?只能匹配3个字符。
但是,这似乎与以下实验相矛盾:
import re
regex = re.compile('(abc|d|abcde){1,2}?(e|f)')
regex.match('abcdef')
Run Code Online (Sandbox Code Playgroud)
...匹配“ abcde”。这必然涉及(abc | d | abcde)的2个重复,即“ abc”和“ d”。但是,有一个备选匹配候选者仅涉及1次(abc | d | abcde)重复,即“ abcde”。
我是在阅读文档,还是{m,n}?实际最小化匹配的字符数(或其他目标),而不是重复的次数?
{m,n}?
尝试匹配的次数越少越好,但这不会影响abc|d|abcde
并改变的行为|
。|
仍然先尝试左选项。
(abc|d|abcde){1,2}?
尝试匹配(abc|d|abcde)
一次,然后匹配成功abc
。然后,正则表达式引擎继续处理其余的模式,并尝试匹配(e|f)
,但失败了。它回溯和尝试匹配的另一种重复abc|d|abcde
和火柴d
。它会继续进行(e|f)
并e
成功匹配。
也许您希望回溯在第一个(abc|d|abcde)
尝试之前尝试其他方法(abc|d|abcde)
。它不会那样做。如果需要的话,它将最终尝试,但是首先尝试更多匹配{1,2}?
。