如果通配符搜索为true,我想要bool
。具体而言,如果存在以下内容:_<any number or char>_
。
理想情况下,我想找到一种优雅的蟒蛇方式。例如,any
对于完全匹配返回true。是否有通配符的等价物?
>>> lst = ['cherry', 'pineapple_1', 'apple', '_olive', 'banana_split_1']
>>> any('_.' in elem for elem in lst)
False
>>> any('_' in elem for elem in lst)
True
>>> any('_*_' in elem for elem in lst)
False
为了澄清,第二个命令应该返回包含两个下划线之间字符的True
元素的'banana_split_1'
b / c。
答案 0 :(得分:2)
你可以随时使用str.find()
,对于这样一个简单的模式,它可能是最快的:
>>> lst = ['cherry', 'pineapple_1', 'apple', '_olive', 'banana_split_1']
>>> any(x.find('_', x.find('_') + 2) != -1 for x in lst)
True
编辑 - 说明:它循环遍历lst
的每个元素,并尝试找到一个下划线,后面跟着另一个下划线,只要它们之间至少有一个字符。考虑为单个案例解开它:
>>> test = 'banana_split_1'
>>> index = test.find('_') # 6, the index of the first underscore
>>> index2 = test.find('_', index + 2) # 12, the index of the next underscore
>>> index2 != -1
True
如果没有第二个下划线(向右移2个空格,因此需要至少一个字符),index2
将为-1,上述生成器中的测试将失败。< / p>
显然,对于所有条目都会重复此操作,直到找到匹配项或any()
返回False
。
答案 1 :(得分:0)
这样的东西?
for elem in list:
if bool(re.search(expression, elem)):
return True
return False
答案 2 :(得分:0)
我认为您需要的关键项是字母数字描述符,例如_[0-9A-Za-z]+_
0-9 digits
A-Z upper-case
a-z lower-case
[] any one of these characters
+ at least one repetition (disallows null string)
围绕着下划线,我相信这是你的搜索模式。