我正在尝试找到正确的 python 正则表达式来解决这个问题:
给定一个由字符?
,_
和组成的字符串o
,找到一个长度n
为仅包含?
ando
和至少一个 o
的子字符串。
这是我想出的,但它似乎不起作用:
n = 3
r = re.compile("
(?=[o?]{"+str(n)+","+str(n)+"}) # first find a block of n characters that are either 'o' or '?'
[o?]*o[o?]* # then check if that block has at least one 'o'
, re.VERBOSE")
我认为上面的问题是前瞻正确地找到了一个潜在的块,但是随后[o?]*o[o?]*
贪婪地消耗了超出第一部分找到的块限制的字符。我希望先行将后续表达式限制在先行匹配的范围内,但我想这不是它的工作原理。
我最终可能会以另一种方式这样做,因为这对于正则表达式来说可能是最好的方法,但我想知道如何在单个正则表达式中做到这一点。