"or"演算子を使用すると、Pythonでかなり単純な正規表現を実行していて、奇妙な動作が見られます。それは返すように文字間のPython正規表現の一致
>> str = "blah [in brackets] stuff"
:私は次のように解析しようとしています
>> ['blah', 'in brackets', 'stuff']
が括弧の間のテキストを一致させるために、私はすなわち、後ろの外観を使用し、先読みしています:
>> '(?<=\[).*?(?=\])'
これを単独で使用すると、実際に括弧内のテキストがキャプチャされます。
>> re.findall('(?<=\[).*?(?=\])' , str)
>> ['in brackets']
しかし、私は空間の間の文字列を解析したり、オペレータを組み合わせると、ブラケット試合は何とか破綻:
私の人生のために>> [x for x in re.findall('(?<=\[).*?(?=\])|.*?[, ]' , str) if x!=' ' ]
>> ['blah', '[in ', 'brackets] ']
私は、この動作を理解することはできません。どんな助けもありがとう。
ありがとうございます!
これは役立つかもしれない - https://regex101.com/r/xM7sK0/1 - 左側にあなたはそれがどのように説明しますデバッガに行くことができますそれはそれがしたことと一致した。 – TessellatingHeckler
ありがとう、それは本当に便利です。 – FrancisWolcott
問題は、正規表現の後半も大括弧に一致することです。最初の試合の後( "blah")、残りのテキストは '[]内にあるものです。 lookbindが開き括弧を見つけられないため、正規表現の前半はここでは一致しません。したがって、正規表現の後半部分が再び一致し、 "[in"というテキストが見つかります。 –