[Python]:用于长字符串行的Python re.search速度优化

时间:2013-11-27 07:55:01

标签: python regex

我将问一下如何加速对python的重新研究 我有一个很长的字符串行,长度为176861(即带有一些符号的字母数字字符),我使用此函数测试了此行以进行re.search:

def getExecTime():
   start_time = time.time()
   re.search(r'.*^string .*=.*', temp)
   stop_time = time.time() - start_time
   print "Execution time is : %s seconds" % stop_time

平均结果为~414秒(约6至7分钟)。 无论如何,我可以减少这个,大约在2分钟左右? 根据此处其他人的反馈,将此长行拆分为字符串列表不会对执行时间产生任何重大影响。 任何想法都非常感谢。提前谢谢!

1 个答案:

答案 0 :(得分:3)

re.search已逐字逐句,用.*开始你的模式只意味着它将始终匹配,并且大字符串的每个字符都可以成为候选者。 ..您需要改进正则表达式,或使用re.match代替re.search

另外 - 你在错误的地方使用^我认为它可以表示换行的开始,(在这种情况下你需要将多行标志re.MULTILINE传递给编译器/ regex)或者在字符集中使用时表示“not”。

您应该将正则表达式更改为以下内容:

r'string [^=]*=.*'

这就是说,找到单词“string”后面跟一个空格,然后查找任何数量的字符,然后是=然后=。另外 - 您可能希望使用+代替*,因为*也可以表示0次匹配,其中+至少需要1个字符。

但是如果没有关于你的最终信息 - 将很难确定究竟需要什么。