从文本中提取行的另一种方法(python-regex)

我正在寻找一种从python中的相当大的数据库中提取行的方法。我只需要保留那些包含我的关键字之一的关键字。我以为可以使用正则表达式来解决问题,所以我将下面的代码放在一起。不幸的是,这给了我一些错误(可能还因为我的关键字确实很大,几乎是500个,这些关键字写在文件listtosearch.txt中的不同行中)。


import re

data = open('database.txt').read() 

fileout = open("fileout.txt","w+")


with open('listtosearch.txt', 'r') as f:

    keywords = [line.strip() for line in f]


pattern = re.compile('|'.join(keywords))


for line in data:

    if pattern.search(line):

        fileout.write(line)

我也尝试过使用双循环(在关键字列表和数据库行中),但运行时间太长。


我得到的错误是:


Traceback (most recent call last):

  File "/usr/lib/python2.7/re.py", line 190, in compile 

    return _compile(pattern, flags)   

  File "/usr/lib/python2.7/re.py", line 240, in _compile 

    p = sre_compile.compile(pattern, flags) 

  File "/usr/lib/python2.7/sre_compile.py", line 511, in compile 

    "sorry, but this version only supports 100 named groups" 

AssertionError: sorry, but this version only supports 100 named groups

有什么建议吗?谢谢


慕桂英4014372
浏览 201回答 3
3回答

炎炎设计

您可能需要看一下Aho–Corasick字符串匹配算法。Python中的工作实现可以发现在这里。该模块的简单用法示例:from pyahocorasick import Triewords = ['foo', 'bar']t = Trie()for w in words:    t.add_word(w, w)t.make_automaton()print [a for a in t.iter('my foo is a bar')]>> [(5, ['foo']), (14, ['bar'])]集成到您的代码中应该很简单。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python