检查字符串是不是包含Python中数组中的多个元素

Posted

技术标签:

【中文标题】检查字符串是不是包含Python中数组中的多个元素【英文标题】:Check if string contains more than one element from array in Python检查字符串是否包含Python中数组中的多个元素 【发布时间】:2016-06-17 06:09:14 【问题描述】:

我在我的项目中使用正则表达式,并且有一个这样的数组:

myArray = [
    r"right",
    r"left",
    r"front",
    r"back"
]

现在我要检查字符串,例如

message = "right left front back"

在此数组中有多个匹配项,我的目的是仅当只有一个单词与数组中的一个匹配时才使 if 为真。

我尝试了很多东西,比如这个

if any(x in str for x in a):

但我从不使用有限的数量。

【问题讨论】:

matches = [x for x in a if x in str] 怎么样。然后,您可以使用len(matches) 检查匹配数。 Python: how to determine if a list of words exist in a string的可能重复 @Michal Frystacky 没有遇到过那个,即使我之前检查了很多,*** 还是那么大!谢谢! @ThaoD5 没问题,希望对你有帮助! 【参考方案1】:
matches = [a for a in myArray if a in myStr]

现在检查matcheslen()

【讨论】:

【参考方案2】:

您可以在此处使用sum。这里的诀窍是True 在找到sum 时计算为1。因此,您可以直接使用in

>>> sum(x in message for x in myArray)
4
>>> sum(x in message for x in myArray) == 1
False

if 子句可能看起来像

>>> if(sum(x in message for x in myArray) == 1):
...     print("Only one match")
... else:
...     print("Many matches")
... 
Many matches

【讨论】:

谢谢,正是我需要的,if 语句示例,完美 ;-)【参考方案3】:
any(x in message for x in myArray)

如果myArray 中的至少一个 字符串在message 中找到,则评估为True

sum(x in message for x in myArray) == 1

如果在myArray 中找到恰好一个字符串,则评估为True

【讨论】:

【参考方案4】:

如果您正在寻找最快的方法之一,请使用集合的交集:

mySet  = set(['right', 'left', 'front', 'back'])
message = 'right up down left'

if len(mySet & set(message.split())) > 1:
    print('YES')

【讨论】:

以上是关于检查字符串是不是包含Python中数组中的多个元素的主要内容,如果未能解决你的问题,请参考以下文章

检查数组中的多个元素是不是包含相同的值

Java - 如何检查字符串是不是包含字符串数组的元素?

检查 BigQuery ARRAY 中是不是有多个元素

检查数组元素是不是包含其他数组中的部分值[重复]

要检查数组是不是仅包含另一个数组中的元素,VB.NET

检查字符串是不是包含数组的任何元素[重复]