1

ドメインのリストを含むテキスト ファイルがあり、Python の正規表現を使用してドメインとサブドメインを照合したいと考えています。

サンプル ドメイン ファイル

admin.happy.com
nothappy.com

次の正規表現があります。

main_domain = 'happy.com'
mydomains = open('domains.txt','r').read().replace('\n',',')
matchobj = re.match(r'^(.*\.)*%s$' % main_domain,mydomains)

コードは短いテキストでは問題なく動作しますが、ドメイン ファイルに 100 以上のエントリがあるとハングしてフリーズします。

テキスト ファイルのコンテンツを操作するために正規表現を最適化する方法はありますか?

4

2 に答える 2

0

壊滅的なバックトラッキングを避けるために、正規表現を単純化できます。

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)

メイン ドメインも一致させたい場合: (r"^(?:(.+)\.)?%s$".

于 2013-05-16T12:37:41.513 に答える