2017-12-06 15 views
1

部分文字列が文字列内にあるかどうかを調べようとしています。 私が実行している問題は、文字列内の別の単語の中で部分文字列が見つかった場合、関数がTrueを返すことを望まないということです。Pythonで文字列内の完全なフレーズを一致させる

たとえば、次のようになります。 "紫色の牛" と文字列は; "紫の牛が最高のペットを作る。" これはFalseを返します。牛は部分文字列に複数ではないので

そして、部分文字列が; "紫の牛" と文字列は; "あなたの紫色の牛は私の垣根を踏みにじった!" は真

私のコードは次のようになります返します:

def is_phrase_in(phrase, text): 
    phrase = phrase.lower() 
    text = text.lower() 

    return phrase in text 


text = "Purple cows make the best pets!" 
phrase = "Purple cow" 
print(is_phrase_in(phrase, text) 

を私の実際のコードでは、私はフレーズにそれを比較する前に、「テキスト」での不必要な句読点やスペースをクリーンアップするが、それ以外、これは同じです。 私はre.searchを使ってみましたが、私はまだ正規表現を理解しておらず、私の例と同じ機能しか持っていません。あなたが提供することができます任意の助け

ありがとう!

+0

ありがとう編集ジャークス!私はその自己を残して気づかなかった。そこで。 – Jroam142

+0

皆様、ありがとうございます! – Jroam142

答えて

0

一つは、ループ

phrase = phrase.lower() 
text = text.lower() 

answer = False 
j = 0 
for i in range(len(text)): 
    if j == len(phrase): 
     return text[i] == " " 
    if phrase[j] == text[i]: 
     answer = True 
     j+=1 
    else: 
     j = 0 
     answer = False 
return answer 

それとも

phrase_words = phrase.lower().split() 
text_words = text.lower().split() 

return phrase_words in text_words 

または我々は、先行するか、何の文字を望んでいないと言うことは、正規表現

import re 
pattern = re.compile("[^\w]" + text + ""[^\w]") 
pattern.match(phrase.lower()) 

を使用して分割することによってでは非常に文字通りこれを行うことができますテキストに続いて、空白は大丈夫です。あなたのフレーズは、単純なスプリットとの交差が動作しませんやって、複数の単語を持つことができますので

0

正規表現はトリック

import re 

def is_phrase_in(phrase, text): 
    phrase = phrase.lower() 
    text = text.lower() 
    if re.findall('\\b'+phrase+'\\b', text): 
     found = True 
    else: 
     found = False 
    return found 
2

を行う必要があります。私はこの1つの正規表現に行くだろう:

import re 

def is_phrase_in(phrase, text): 
    return re.search(r"\b{}\b".format(phrase), text, re.IGNORECASE) is not None 

phrase = "Purple cow" 

print(is_phrase_in(phrase, "Purple cows make the best pets!")) # False 
print(is_phrase_in(phrase, "Your purple cow trampled my hedge!")) # True 
+0

ありがとう、それは完璧です!私は自分のためにそれをほとんど理解したように見える。 re.searchに変数「フレーズ」をどうやって取得し、文字列の書式設定を使うことは決して考えなかった。正規表現を学ぶ時間。 – Jroam142

関連する問題