私は検索パターンを探しています。他のパターンの中には追従すべきではない特定のパターンがあります。何らかの形でこのパターンが存在する場合は、<
と>
文字のあとに、\
文字をエスケープする必要があります。文字がパターンに含まれていない場合、文字が存在する可能性があります。regex:文字が存在し、その後に別のエスケープ文字が続く必要があります
私は、このようにそれをやってみました: input_string = '<First tag:<Second tag:hello>tag ends>' re.findall('(?<!\\)<.*?:.*?(?<!\\)>',input_string)
予想される出力: ['<Second tag:hello>']
私は何を得たことである: ['<First tag:<Second tag:hello>']
私はこのパターンで試してみました: (?<!\\)<[^(?<!\\)<.*:]+:[^(?<!\\)<.*:]+?(?<!\\)>
は、これは上記の例を渡します。この入力に対して: input_str = '<First tag:\<Second tag:hello>tag ends> <First tag:<Second tag:hello\>tag ends> <First tag:\<Second tag:hello\>tag ends>'
それは失敗します。
これは、予想される出力です: ['<First tag:\<Second tag:hello>','<Second tag:hello\>tag ends>','<First tag:\<Second tag:hello\>tag ends>']
の例として
<a:a>
は無限のネスティングで何かを解析する正規表現を使用しないでください。それは動作しません。 –それで、最も内側にエスケープされていない '<' to '>'が欲しいですか?それは正規表現で実行可能なはずです。 – TemporalWolf
@TemporalWolfはい、まさに.. ':'で '<' and '> ' – Sohn