0

キーワードのリストと文のリストがあるとします。

keywords = ['foo', 'bar', 'joe', 'mauer']
listOfStrings = ['I am frustrated', 'this task is foobar', 'mauer is awesome']

listOfStrings をループして、キーワードが含まれているかどうかを判断するにはどうすればよいですか...完全に一致する必要があります! そのような:

>>for i in listOfStrings:
    for p in keywords:
       if p in i:
         print i

>> 'mauer is awesome'

('foobar' は 'foo' または 'bar' と完全に一致しないため、関数はキーワードの場合にのみ 'foobar' をキャッチする必要があります)

re.search がその方法であると思われますが、 re モジュールを使用した逐語的な式ではなく、変数を使用してリストをループする方法がわかりません。
ありがとう

4

3 に答える 3

1

完全一致のはるかに優れたアイデアは、キーワードをセットに格納することです

keywords = {'foo', 'bar', 'joe', 'mauer'}
listOfStrings = ['I am frustrated', 'this task is foobar', 'mauer is awesome']

[s for s in listOfStrings if any(w in keywords for w in s.split())]

これは、各単語をlistOfStrings1 回だけテストします。メソッド(または正規表現を使用)は、各キーワードのすべての単語をlistOfStrings調べます。キーワードの数が増えると、それは非常に非効率的になります。

于 2013-05-12T22:29:21.613 に答える
0

正規表現のメタ文字で単語を囲み、\bそれを正規表現として使用する場合は、単語の境界で一致する必要があります。

http://www.regular-expressions.info/wordboundaries.html

メタ文字 \b は、キャレットやドル記号のようなアンカーです。「単語境界」と呼ばれる位置で一致します。この一致はゼロ長です。

さらに、Python 正規表現が次を使用していることを確認してくださいre.IGNORECASE: http://docs.python.org/2/library/re.html#re.IGNORECASE

\また、言語の文字列パーサーと正規表現エンジン自体の両方でメタ文字と見なされる可能性があることを忘れないでください。つまり、 に倍増する必要があります\\b

于 2013-05-12T22:25:28.117 に答える