私はこの問題を解決するために正しいPython正規表現を見つけようとしています:
?
文字、、、_
およびで構成される文字列が与えられた場合、およびと少なくとも1つだけを含むo
長さの部分文字列を見つけます。n
?
o
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?]*
、最初の部分で検出されたブロックの制限を超えて、貪欲に文字を消費しています。先読みが、先読みが一致した範囲内で一致するように後続の式を制限することを期待していましたが、それはどのように機能するかではないと思います。
これはおそらく正規表現には論理が多すぎて最良の方法ではないため、おそらく別の方法でこれを行うことになりますが、単一の正規表現でこれを行う方法を知りたかったのです。