我们是否有正则表达式供我们检查字符串中是否存在多个单词
Ex:
sentence = "hello i am from New York city"
我想检查句子中是否有“ hello”,“ from”和“ city”。
我尝试使用
re.compile("hello|from|city")
但是没有运气,因为即使找到一个匹配项,它也会返回true。
答案 0 :(得分:3)
您不能替代,因为任何替代的匹配都将满足正则表达式。相反,请从字符串开头使用多个前行:
sentence1 = "hello i am from New York city"
sentence2 = "hello i am from New York"
regex = re.compile(r"^(?=.*hello)(?=.*from)(?=.*city)")
print(regex.match(sentence1))
print(regex.match(sentence2))
输出:
<_sre.SRE_Match object; span=(0, 0), match=''>
None
答案 1 :(得分:1)
您可以使用内置的all()
方法。
文档here
该函数有效地采用iterable
类型作为参数。
示例:
words = ["hello", "from", "city"]
if all(word in 'hello from the city' for word in words):
# Do Something
答案 2 :(得分:0)
您可以在不使用正则表达式的情况下执行此操作,只需检查words
中每个单词(从sentence
开始)的输入即可:
sentence = "hello i am from New York city"
words = ['hello', 'from', 'city']
all([w in sentence.split() for w in words])
在我看来,由于清晰起见,这种方式是可取的。
答案 3 :(得分:0)
尝试:
>>> sentence = "hello i am from New York city"
>>> def f(s):
return all(s.split().__contains__(i) for i in ['hello','from','city'])
>>> f(sentence)
True