gpt4 book ai didi

python - re.search() 挂起

转载 作者:行者123 更新时间:2023-12-01 08:59:58 25 4
gpt4 key购买 nike

此代码片段旨在在所提供文件的每一行上搜索正则表达式匹配。 re.search() 在文件中包含“#”字符的行上挂起 3e+5 次。

<小时/>

有什么办法可以解决这个问题?

import re
print "Started..."
exp = "(.*)\$\$\$Uniqueterm:(.*)"
with open("sample.txt", 'r') as file:
for line in file:
if re.search(exp, line):
print "Found match: " + re.search(exp,line).groups()[1].strip()
print "File finished..."

示例输入文件(sample.txt):

abc
pqr
##### (3e+5 times '#' in a single line)
xyz
$$$Uniqueterm: Match it
qaz

预期输出:

Match it

最佳答案

您正在将 re.search 与以 (.*) 开头的正则表达式结合使用。 re.search 在任何起始位置查找匹配项,这意味着它必须从每个可能的起始索引开始搜索,直到找到匹配项或用完可搜索的位置。前导 (.*) 强制从搜索起始位置开始扫描整个字符串,对于每个起始位置

这是经典的灾难性回溯,只是部分回溯隐含在使用 re.search 中,而不是内置于正则表达式本身中。您可以调整正则表达式来消除灾难性的回溯,但为什么要使用正则表达式呢? str.splitstr.find 等基本方法可以很好地完成这项工作。 Jean-François Fabre 的回答展示了一种方法。

关于python - re.search() 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52530863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com