0

最初に、次のコードを使用してファイルを 1 つの単語で検索しようとしました。

import re

shakes = open("tt.txt", "r")

for line in shakes:
    if re.match("(.*)(H|h)appy(.*)", line):
        print line,

しかし、複数の単語をチェックする必要がある場合はどうすればよいでしょうか? forリスト内の異なる単語を毎回ファイルで検索して、ループのようなものが機能するのではないかと考えていました。

これは便利だと思いませんか?

4

3 に答える 3

3

区切り文字としてword_list を結合するだけ|です。(?i)大文字と小文字を区別しない修飾子は、大文字と小文字を区別しない一致を行うのに役立ちます。

for line in shakes:
    if re.search(r"(?i)"+'|'.join(word_lst), line):
        print line,

例:

>>> f = ['hello','foo','bar']
>>> s = '''hello
hai
Foo
Bar'''.splitlines()
>>> for line in s:
        if re.search(r"(?i)"+'|'.join(f), line):
            print(line)


hello
Foo
Bar

正規表現なし:

>>> f = ['hello','foo','bar']
>>> s = '''hello
hai
Foo
Bar'''.splitlines()
>>> for line in s:
        if any(i.lower() in line.lower() for i in f):
            print(line)


hello
Foo
Bar
于 2015-03-21T09:40:19.277 に答える
0

正規表現は少し暗黙的であるため、ここで正規表現を使用することはpythonicではないと思います。したがって、速度がそれほど重要でない場合は、ループを使用します。

def find_word(word_list, line):
    for word in word_list:
        if word in line:
            return line

with open('/path/to/file.txt') as f:
    result = [find_word(word_list, line.lower()) for line in f.readlines()]  
于 2015-03-21T10:00:12.397 に答える
0

別のアイデアは、を使用することsetです。

以下のコードは、ファイル内のすべての単語がスペースで区切られていることを前提としており、それword_listが検索する単語のリストです。

shakes = open("tt.txt", "r")
words = set(word_list)
for line in shakes:
    if words & set(line.split()):
        print line,

大文字と小文字を区別しない検索を行う場合は、各文字列を小文字に変換できます。

shakes = open("tt.txt", "r")
words = set(w.lower() for w in word_list)
for line in shakes:
    if words & set(line.lower().split()):
        print line,
于 2015-03-21T18:37:05.097 に答える