Alienshave just discovered a way to open cans
此脚本显示print
但我不希望它String
Alienshave
,因为String
中的Aliens
字与Arr
中的字argparse
不完全相同1}}
我如何做到这一点,以便比较的基础是数组中的字符串,并且不像通配符那样行事。
答案 0 :(得分:4)
使用带有字边界(\b
)的正则表达式:
匹配空字符串,但仅匹配单词的开头或结尾。 单词被定义为Unicode字母数字或下划线的序列 字符,所以单词的结尾用空格或a表示 非字母数字,非下划线Unicode字符。注意 正式地,
\b
被定义为\w
和\W
之间的边界 字符(反之亦然),或\ w和\ n的开头/结尾 串。这意味着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
答案 1 :(得分:0)
我使用String.split()
将字符串拆分为单词。