字符之间的通配符匹配
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)
用下划线括起来,我相信这就是您的搜索模式。
如果通配符搜索为真,我想要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)
用下划线括起来,我相信这就是您的搜索模式。