我试图确定子字符串是否在字符串中。 我遇到的问题是,如果在字符串中的另一个单词中找到子字符串,我不希望我的函数返回True。
例如:如果子串是; "紫牛" 而字符串是; "紫色奶牛是最好的宠物。" 这应该返回False。由于母牛在子串中不是复数。
如果子串是; "紫牛" 而字符串是; "你的紫牛践踏了我的树篱!" 会返回True
我的代码看起来像这样:
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 :(得分:6)
由于您的短语可以包含多个单词,因此执行简单的拆分和交叉将不起作用。我会选择正则表达式:
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
答案 1 :(得分:1)
使用PyParsing:
import pyparsing as pp
def is_phrase_in(phrase, text):
phrase = phrase.lower()
text = text.lower()
rule = pp.ZeroOrMore(pp.Keyword(phrase))
for t, s, e in rule.scanString(text):
if t:
return True
return False
text = "Your purple cow trampled my hedge!"
phrase = "Purple cow"
print(is_phrase_in(phrase, text))
哪个产量:
True
答案 2 :(得分: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())
说我们不希望在文本之前或之后有任何字符,但是空格是可以的。
答案 3 :(得分: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
答案 4 :(得分:0)
您在这里,希望对您有帮助
# Declares
string = "My name is Ramesh and I am cool. You are Ram ?"
sub = "Ram"
# Check String For SUb String
result = sub in string
# Condition Check
if result:
# find starting position
start_position = string.index(sub)
# get stringlength
length = len(sub)
# return string
output = string[start_position:len]