字符之间的通配符匹配

Wildcard Match Between Characters

如果通配符搜索为真,我想要bool。具体来说,如果存在以下内容:_<any number or char>_.

理想情况下,我想找到一种优雅的 pythonic 方式。例如,any returns 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

为了澄清,第二个命令应该 return True b/c of 'banana_split_1' 元素包含两个下划线之间的字符。

您可以随时使用 str.find(),对于这种简单的模式,它也可能是最快的:

>>> lst = ['cherry', 'pineapple_1', 'apple', '_olive', 'banana_split_1']
>>> any(x.find('_', x.find('_') + 2) != -1 for x in lst)
True

EDIT - 解释:它遍历 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,并且上述生成器中的测试将失败。

显然,对所有条目重复此操作,直到找到匹配项或 any() returns False.

是这样的吗?

for elem in list:
    if bool(re.search(expression, elem)):
        return True
return False

我认为您需要的关键项目是字母数字描述符,例如 _[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)

用下划线括起来,我相信这就是您的搜索模式。