我知道可以使用string.find()
在字符串中查找子字符串。
但是,在不使用循环的情况下,找出其中一个数组项是否在字符串中具有子字符串匹配的最简单方法是什么?
伪代码:
string = 'I would like an apple.'
search = ['apple','orange', 'banana']
string.find(search) # == True
答案 0 :(得分:21)
您可以使用生成器表达式(以某种方式 循环)
any(x in string for x in search)
生成器表达式是括号内的部分。它创建一个iterable,为元组x in string
中的每个x
返回search
的值。 x in string
反过来会返回string
是否包含子字符串x
。最后,Python内置any()
遍历它传递的迭代,并在其任何项目评估为True
时返回。
或者,您可以使用正则表达式来避免循环:
import re
re.search("|".join(search), string)
我会选择第一个解决方案,因为正则表达式存在陷阱(逃避等)。
答案 1 :(得分:3)
Python中的字符串是序列,您可以通过询问一个字符串是否存在于另一个字符串中来进行快速成员资格测试:
>>> mystr = "I'd like an apple"
>>> 'apple' in mystr
True
Sven在上面的第一个答案中说得对。要检查其他字符串中是否存在多个字符串,您可以执行以下操作:
>>> ls = ['apple', 'orange']
>>> any(x in mystr for x in ls)
True
值得注意的是,未来的参考是只有当'ls'中的所有项都是'mystr'的成员时,内置的'all()'函数才会返回true:
>>> ls = ['apple', 'orange']
>>> all(x in mystr for x in ls)
False
>>> ls = ['apple', 'like']
>>> all(x in mystr for x in ls)
True
答案 2 :(得分:1)
更简单的是
import re
regx = re.compile('[ ,;:!?.:]')
string = 'I would like an apple.'
search = ['apple','orange', 'banana']
print any(x in regx.split(string) for x in search)
修改
更正,在阅读了Sven的答案后:显然,字符串不得分裂,愚蠢! any(x in string for x in search)
效果很好
如果你不想要循环:
import re
regx = re.compile('[ ,;:!?.:]')
string = 'I would like an apple.'
search = ['apple','orange', 'banana']
print regx.split(string)
print set(regx.split(string)) & set(search)
结果
set(['apple'])