检查一个字符串,如果它包含一个字符串,它是一个列表蟒蛇内
问题描述:
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
检查一个字符串,如果它包含一个字符串,它是一个列表蟒蛇内
,但我不希望它print
String
因为这个词Alienshave
在String
是不完全一样的字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
答
我用String.split()
其将字符串转换成单词。
感谢您的解释。 :竖起大拇指: – Boneyflesh