0

私はこのスクリプトを使用しています:

import re

message = 'oh, hey there'
matches = ['hi', 'hey', 'hello']

def process(message):
    for item in matches:
        search = re.match(item, message)

    if search == None:
        return False
    return True

print process(message)

基本的に、私の目的は のいずれかの部分がmessageのアイテムの中にあるかどうかを確認することですがmatches、このスクリプトを使用すると、常に返されますFalse(一致しません)。

このコードで何か間違ったことをしている場合、誰かが指摘できますか?

4

2 に答える 2

3

searchではなく使用しmatchます。最適化としてmatch、文字列内のどこからでも検索するのではなく、文字列の先頭からのみ検索を開始します

さらに、最後の一致試行の結果のみを見ています。ループ内をチェックし、一致する場合は早期に返す必要があります。

for item in matches:
    if re.search(item, message):
        return True
return False

部分文字列のみに関心があり、正規表現で一致させる必要がない場合は、単にoperatorを使用するinことに注意してください。

for item in matches:
    if item in message:
        return True
return False
于 2012-05-27T00:40:46.073 に答える
2

icktoofay の回答が示すように、文字列内の任意の場所を検索する場合はre.search()代わりに使用する必要がありre.match()ますが、この単純なものについては、通常の部分文字列テストを使用できます。

message = 'oh, hey there'
matches = ['hi', 'hey', 'hello']

def process(message):
    return any(item in message for item in matches)

print process(message)
于 2012-05-27T00:44:23.463 に答える