【问题标题】: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) 检查匹配数。
  • @Michal Frystacky 没有遇到过那个,即使我之前检查了很多,stackoverflow 还是那么大!谢谢!
  • @ThaoD5 没问题,希望对你有帮助!

标签: python arrays regex string list


【解决方案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')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-13
        • 1970-01-01
        • 2019-10-22
        • 2016-09-22
        • 1970-01-01
        • 2019-11-26
        • 2011-12-23
        • 2013-10-03
        相关资源
        最近更新 更多