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 を使用して「返信」という用語を指定していますが、これにより 1 つの用語に制限されます。検索する単語のリストまたは辞書を指定する方法があることは知っていますが、私の試みは失敗しました。のようなものでリストを作成することは可能だと思います...

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 moduleのドキュメントを参照してください。

実際、あなたの質問には答えがあります..."R|r"は "R" または "r" を"reply|error|what"検索するので、'reply'、'error'、または 'what' を検索します。

PS。検索で大文字と小文字を区別したい場合、... " (.*)(R|r)eply(.*)"を使用できますか?

ビットは必要ありません.*(コードが遅くなる可能性があります)。re.search() 関数は、文字列内の任意の場所で一致を探します。 (R|r)eply'reply' または 'Reply' を検索しますが、'REPLY' または 'rePly' には一致しません。

大文字と小文字を区別しない検索が必要な場合は、 にflags=re.IGNORECASE渡すことができるオプションがありますre.search()。例えば:

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