字符之间的通配符匹配

时间:2017-07-18 21:05:25

标签: python regex boolean any

如果通配符搜索为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。

3 个答案:

答案 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)

围绕着下划线,我相信这是你的搜索模式。