我应该通过包含?
和*
的子字符串和两个可识别的字符模式来过滤字符串数组。
[?
-任何一个符号
*
-任何数量的任何符号
带有数据['baab', 'abbb', 'fc', 'AA']
的示例,它应作为:
'?b' -> ['baab', 'abbb']
'?a' -> ['baab']
'c?' -> []
'b??b' -> ['baab']
'???' -> ['baab', 'abbb']
'b*b' -> ['baab', 'abbb']
'***' -> ['baab', 'abbb', 'fc', 'AA']
我无法使用in
运算符。最简单的解决方法是什么?也许应该是RegExp(但我不确定)或其他。
您需要接受glob模式的fnmatch.filter(names, pattern)
方法(这是您的fnmatch.filter(names, pattern)
和?
在这里,通配符)。
这里唯一的问题是,*
球必须在不固定模式的情况下匹配整个输入。
因此您需要用fnmatch
包裹模式:
*
输出:
import fnmatch
l = ['baab', 'abbb', 'fc', 'AA']
print(fnmatch.filter(l, '*{}*'.format('?b')))
print(fnmatch.filter(l, '*{}*'.format('?a')))
print(fnmatch.filter(l, '*{}*'.format('c?')))
print(fnmatch.filter(l, '*{}*'.format('b??b')))
print(fnmatch.filter(l, '*{}*'.format('???')))
print(fnmatch.filter(l, '*{}*'.format('b*b')))
print(fnmatch.filter(l, '*{}*'.format('***')))
请参见['baab', 'abbb']
['baab']
[]
['baab']
['baab', 'abbb']
['baab', 'abbb']
['baab', 'abbb', 'fc', 'AA']
。
Python demo
请参考import re
list = ['baab', 'abbb', 'fc', 'AA']
l = [s for s in list if re.match('.+b', s)] # l = ['baab', 'abbb']
l = [s for s in list if re.match('b..b', s)] # l = ['baab']
l = [s for s in list if re.match('.*b.*b', s)] # l = ['baab', 'abbb']
以获取完整参考。