文字列からの文字列 "foo"を次の形式に一致させる必要があります。
string = "/foo/boo/poo"
私はこのコードを結びました:
poo = "poo"
foo = re.match('.*(?=/' + re.escape(poo) + ')', string).group(0)
そして、変数fooのコンテンツとして/foo/boo
を(foo/boo
だけではなく)与えます。
私はこのコードを試しました:
poo = "poo"
foo = re.match('(?=/).*(?=/' + re.escape(poo) + ')', string).group(0)
同じ出力が得られます(/foo/boo
ではなくfoo/boo
)。
foo/boo
部分のみを一致させるにはどうすればよいですか?
次の正規表現を試してください:
(?<=/).*(?=/poo)
^^^^^^
結果の最初のスラッシュは考慮されません。
テスト済みregex101: https://regex101.com/r/yzMkTg/1
次の方法でコードを変換すると、機能するはずです。
poo = "poo"
foo = re.match('(?<=/).*(?=/' + re.escape(poo) + ')', string).group(0)
Positive lookahead
およびPositive lookbehind
の動作の詳細については、このリンクをざっと見てください。
後読みに<
がありません!
後読みは次のようになります。
(?<=...)
このようではない:
(?=...)
それは一見でしょう先に!
そう、
(?<=/).*(?=/poo)