优化正则表达式以精细键=值对,空格分隔

时间:2014-04-04 19:34:44

标签: regex python-2.7 optimization key

使用regexpal中的当前正则表达式缩短网址: http://bit.ly/1jbOFGd

我有一行key = value对,空格分隔。有些值包含空格和标点符号,所以我做了一个积极的预测,以检查是否存在另一个键。

我想将键和值标记化,然后我将其转换为python中的dict。

我的猜测是,我可以通过摆脱来加快速度。*?但怎么样?在python中,我在4.3秒内转换10,000行。我希望通过使这个正则表达式匹配更有效率来使速度提高一倍或三倍。

2 个答案:

答案 0 :(得分:2)

<强>更新

(?<=\s|\A)([^\s=]+)=(.*?)(?=(?:\s[^\s=]+=|$))

我认为这个比你的效率更高(即使它仍然使用.*?作为值,它的前瞻不是那么复杂并且不使用惰性修饰符),但我'我需要你去测试。这与我的原始表达式相同,但处理值的方式不同。它使用一个惰性.*?匹配,后跟一个前瞻,即 一个空格,后跟一个键,后跟一个=或字符串的结尾。请注意,我总是将密钥定义为[^\s=]+,因此密钥不能包含等号或空格(具体来说,这有助于我们避免延迟匹配)。

Source


<强>原始

通过做某事this simple是否有一些我缺少的规则?

(?<=\s|\A)([^=]+)=([\S]+)

首先是空格字符(\s)或字符串开头(\A)的后视图。然后我们匹配除=之外的所有内容,后跟=,并匹配除空格(\s)之外的所有内容。

答案 1 :(得分:1)

&#34;回顾后&#34; (与前瞻&#39;以及&#39;&#39;&#39;相关)是关键的正则表达式&#39;在这里阅读的概念 - 它让你匹配并跳过字符串的各个组成部分。

这里的好例子:http://www.rexegg.com/regex-lookarounds.html