1

我正在努力完成标题所说的内容。该程序旨在从指定路径读取 .txt 文件并匹配代码中指定的术语。这是我到目前为止所拥有的:

import re

source = open("C:\\test.txt", "r")
lines = []

for line in source:
    line = line.strip()
    lines.append(line)
    if re.search('reply', line):
        print 'found: ', line

如您所见,我使用 re.search 指定术语“回复”,但这将我限制为一个术语。我知道有一种方法可以指定要搜索的单词列表或字典,但我的尝试失败了。我认为可以创建一个类似...的列表

keywords = ['reply', 'error', 'what'] 

...但是尽管我在这个网站上阅读了这些内容,但我似乎无法将其正确地合并到代码中。非常感谢您对此的任何建议或帮助!

PS。如果我想让搜索区分大小写,我可以使用...

"(.*)(R|r)eply(.*)"

...在我要查找的术语列表中?

4

2 回答 2

3

单程:

import re
source = open("input", "r")
lines = []
keywords = ['reply', 'error', 'what']
# join list with OR, '|', operators
# re.I makes it case-insensitive
exp = re.compile("|".join(keywords), re.I)
for line in source:
    line = line.strip()
    lines.append(line)
    if re.search(exp, line):
        print 'found: ', line
于 2013-03-27T01:08:10.340 回答
1

使用 re.search(),你传递一个字符串,但你可以指定相当复杂的模式。请参阅Python re 模块上的文档,其中有一个关于“正则表达式语法”的部分。

事实上,你的问题有答案......"R|r"搜索“R”或“r”,因此"reply|error|what"搜索“回复”、“错误”或“什么”。

PS。如果我想让搜索区分大小写,我可以使用...“ (.*)(R|r)eply(.*)

不需要这个.*位(它可能会使你的代码变慢)。re.search() 函数在字符串 中的任何位置查找匹配项。(R|r)eply将寻找“回复”或“回复”,它不会匹配“回复”或“回复”。

如果你想要一个不区分大小写的搜索,有一个flags=re.IGNORECASE选项可以传递给re.search(). 例如:

re.search('reply', line, flags=re.IGNORECASE)
于 2013-03-27T01:55:10.987 回答