a=b c=d e=f
次のような辞書になるはずの多くの値を解析するための正規表現があります{'a': 'b', 'c':'d', 'e':'f'}
。\
私が使用した本当に単純な正規表現の代わりに、ユーザーが使用して値をエスケープできるようにしたかったので、((?:[^\\\s=]+|\\.)+)
追加(?:^|\s)
し(?=\s|$)
たため、式は部分的な結果と一致しません。
>>> import re
>>> reg = re.compile(r'(?:^|\s)([\w\d]+)=((?:[^\\\s=]+|\\.)+)(?=\s|$)')
>>> s = r'a=b c=d e=one\two\three'
>>> reg.findall(s)
[('a', 'b'), ('c', 'd'), ('e', 'one\\two\\three')]
しかし、その後、誰かがやってきて=
、物事の右側に挿入されました.
>>> s = r'a=b c=d e=aaaaaaaaaaaaaaaaaaaaaaaaaa\bbbbbbbbbbbbbbbbbbbbbbbbbbbb\cccc
ccccc=dddddddddddddddd\eeeeeeeeeeeeeee'
>>> reg.findall(s)
そして、スクリプトはこの行で動かなくなりました (私は数時間待っていましたが、終了しませんでした)。
質問: これは貧弱な正規表現ですか (なぜですか? どうやって書きましたか?)、それとも正規表現の実装のバグですか?
注: この問題の解決策を求めているわけではありません。数時間で終了しない理由が気になります。 findall()