字符之间的通配符匹配
如果通配符搜索为真,我希望有bool
。具体而言,如果存在以下情况:_<any number or char>_
。字符之间的通配符匹配
理想情况下,我想找到一种优雅的pythonic方式。例如,对于完全匹配,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
为了澄清,所述第二命令应返回含有两个下划线之间的字符'banana_split_1'
元件的True
B/C。
您可以随时使用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和测试在没有一个第二个下划线上述发生器会失败。
显然,这对于所有条目重复,直到找到匹配或any()
返回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)
环绕在下划线,我相信这是你的搜索模式。
谢谢,我会尝试。它可以工作。你会使用“搜索”还是“匹配”? –
我打算把我的教师帽放在上面:看看[正则表达式中的教程}(https://docs.python.org/2/howto/regex.html)并学习*全部*(好,尽可能多你觉得今天吸收)你的基本知识。 – Prune
你用'regex'标记了这个问题,这是一个明显的解决方案;使用正则表达式有什么问题? – Prune
@Prune,是的,我认为解决方案将包含're',但我很难建立表达式。此外,我想看看在完全匹配的情况下是否还有其他类似于“任何”的方法。 –
这些比赛的关键是'in',而不是'any' ......并且're'是工具。 – Prune