3

次の関数を使用して、文字列内の単語の完全一致を見つけました。

def exact_Match(str1, word):
    result = re.findall('\\b'+word+'\\b', str1, flags=re.IGNORECASE)
    if len(result)>0:
        return True
    else:
        return False

exact_Match(str1, word)

しかし、「受賞」と「受賞」の両方の単語が完全に一致するのは、次の文字列に対してのみ受賞する必要がある場合です。

str1 = "award-winning blueberries"
word1 = "award"
word2 = "award-winning"

re.findall が単語全体をハイフンやその他の句読点と一致させるにはどうすればよいですか?

4

2 に答える 2

6

独自の単語境界を作成します。

def exact_Match(phrase, word):
    b = r'(\s|^|$)' 
    res = re.match(b + word + b, phrase, flags=re.IGNORECASE)
    return bool(res)

ここから私のインタープリターにコピーして貼り付けます:

>>> str1 = "award-winning blueberries"
>>> word1 = "award"
>>> word2 = "award-winning"
>>> exact_Match(str1, word1)
False
>>> exact_Match(str1, word2)
True

実際、へのキャストboolは不要であり、まったく役に立ちません。関数はそれなしでより良いです:

def exact_Match(phrase, word):
    b = r'(\s|^|$)' 
    return re.match(b + word + b, phrase, flags=re.IGNORECASE)

注:exact_Matchかなり型破りなケーシングです。それをexact_matchと呼ぶだけです。

于 2013-05-27T02:38:12.957 に答える