Python使用重新匹配用长tex悬挂

2024-04-25 06:42:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含域列表的文本文件,我想使用python正则表达式来匹配域和任何子域。在

域文件示例

admin.happy.com
nothappy.com

我有以下regexp:

^{pr2}$

这段代码对于短文本来说很好,但是当我的域文件有100多个条目时,它就会挂起并冻结。在

有没有方法可以优化regexp来处理文本文件中的内容?在


Tags: 文件方法子域代码com示例列表admin
2条回答

为了避免灾难性的回溯,可以简化正则表达式:

import re

with open("domains.txt") as file:
    text = file.read()
main_domain = "happy.com"
subdomains = re.findall(r"^(.+)\.%s$" % re.escape(main_domain), text, re.M)

如果您还想匹配主域:^{}。在

(.*\.)*很可能导致可怕的回溯。如果文件每行包含一个域,最简单的修复方法是在每行上执行regex,而不是同时执行整个文件:

main_domain = 'happy.com'
for line in open('domains.txt','r')):
    matchobj = re.match(r'^(.*\.)*%s$' % main_domain, line.strip())
    # do something with matchobj

如果您的文件中除了域以外没有其他内容,您甚至可以简化这些内容,而不使用正则表达式:

^{pr2}$

相关问题 更多 >