2016-03-03 134 views
3

从阵列多个元素我使用正则表达式在我的项目,并且有一个这样的数组:检查字符串包含在Python

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

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

message = "right left front back" 

有这个阵列中的一个以上的比赛,我在这里的目的是有一个,如果是真实的,只有当只有一个词相匹配的阵列中的一个。

我尝试了很多东西,像这样的

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

但我从来没有使它与数量有限的工作。

+0

怎么样'匹配='[中如果x str中X为X]。然后你可以用'len(matches)'检查匹配的数量。 – zondo

+4

[Python:如何确定字符串中是否存在单词列表]的可能重复(http://stackoverflow.com/questions/21718345/python-how-to-determine-if-a-list-of-words在字符串中存在) –

+2

@Michal Frystacky没有遇到过,即使我之前查了很多,stackoverflow是如此巨大!谢谢 ! – ThaoD5

回答

3
matches = [a for a in myArray if a in myStr] 

现在检查的matcheslen()

+1

太棒了!谢谢 – ThaoD5

3

您可以在这里使用sum。这里的技巧是True计算为1,同时找到sum。因此,您可以直接使用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 
+0

谢谢,正是我所需要的,与if语句的例子,完美;-) – ThaoD5

+0

很高兴成为帮助。 –

2
any(x in message for x in myArray) 

则计算结果为True如果至少一个myArray字符串中message被发现。

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

则计算结果为True如果恰好myArray一个字符串中message被发现。

2

如果您正在寻找最快的方法来做到这一点使用的套十字路口之一:

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

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