【发布时间】:2013-06-12 08:25:36
【问题描述】:
我有用于解析许多值的正则表达式,例如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() 没有在几个小时内完成。
【问题讨论】:
-
为什么不让
=出现在=的右边,而你的分隔符是空格? -
@DavidFoerster 这是一个错误(已经修复)。我很感兴趣为什么
findall永远不会结束。 -
真正的问题是“为什么你有这么糟糕的格式”?使用 JSON、YAML、换行符分隔的 key=value 对等等!
-
@kirelagin 第三方应用程序。对此无能为力。
标签: python regex python-3.2