我有一个列表,看起来像这样:
list = ['for','and','with','be in']
并且我已经实现了一些代码来检查上面的单词是否包含在字符串中:
if any(word in stringVar for word in list):
\logic
以上工作如预期,然而,我不希望有一些短语被排除在上面,如下:
exc_list = ['for every','for each']
所以本质上,我想改变我的if语句,以便如果and
,with
和be in
包含在stringVar
中,或者for
包含在stringVar
中,而不是当它后面跟着every
或each
时,它返回true。
我最初实现了这个:
if any(word in stringVar for word in list) and any(word not in stringVar for word in exc_list):
\logic
但是如果stringVar
等于'will be in every day for each week',这将不会像预期的那样工作。
来确认,我想还真当and
,with
stringVar
be in
都包含在,即使for each/every
也出现。只有当for
出现在stringVar
只使用替换字符串,删除替换字符串中的所有排除项。
这样你就知道你的排除不在字符串中,可以直接检查你关心的项。
string = 'will be in every day for each week'
lst = ['for','and','with','be in']
exclusions = ['for every','for each']
replaced_string = string
for phrase in exclusions:
replaced_string = replaced_string.replace(phrase, '')
if any(word in replaced_string for word in lst):
# do stuff
你甚至可以把它放在一个函数,让它看起来更好。
def string_minus_exclusions(string, exclusions):
for phrase in exclusions:
string = string.replace(phrase, '')
return string
string = 'will be in every day for each week'
lst = ['for','and','with','be in']
exclusions = ['for every','for each']
replaced = string_minus_exclusions(string, exclusions)
if any(word in replaced for word in lst):
# do stuff