我有用于解析许多值的正则表达式,例如a=b c=d e=f
应该导致这样的字典:{'a': 'b', 'c':'d', 'e':'f'}
。我希望用户允许使用\
so 而不是我使用过的非常简单的正则表达式来转义值,并且((?:[^\\\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()
没有在几个小时内完成。