检查一个字符串,如果它包含一个字符串,它是一个列表蟒蛇内

问题描述:

String = "Alienshave just discovered a way to open cans" 
Arr=["Aliens","bird","cactus","John Cena"] 

if any(words in String for words in arr): 
     print String 

此脚本显示Alienshave just discovered a way to open cans检查一个字符串,如果它包含一个字符串,它是一个列表蟒蛇内

,但我不希望它printString因为这个词AlienshaveString是不完全一样的字Aliens发现于Arr

我该如何做,以便比较的基础是数组中的字符串,并且不像通配符那样工作。

使用与字边界(\b)正则表达式:

匹配空字符串,但只在一个单词的开头或结尾。 单词被定义为Unicode字母数字或下划线的字符序列,因此单词的末尾用空格或 非字母数字,非下划线Unicode字符表示。请注意, 正式,\b定义为\w\W 字符(或反之亦然)之间的边界,或\ w和 字符串的开始/结尾之间的边界。这意味着r'\bfoo\b'匹配'foo','foo.','(foo)', 'bar foo baz'但不是'foobar''foo3'


string = "Alienshave just discovered a way to open cans" 
arr = ["Aliens","bird","cactus","John Cena"] 

import re 
pattern = r'\b({})\b'.format('|'.join(arr)) # => \b(Aliens|bird|cactus|John Cena)\b 
if re.search(pattern, string): 
    print(string) 
# For the given `string`, above `re.search(..)` returns `None` -> no print 
+0

感谢您的解释。 :竖起大拇指: – Boneyflesh

我用String.split()其将字符串转换成单词。