Python如何使用特殊符号搜索子字符串?和*(类似于RexExp)

问题描述 投票:0回答:2

我应该通过包含?*的子字符串和两个可识别的字符模式来过滤字符串数组。

[?-任何一个符号

*-任何数量的任何符号

带有数据['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(但我不确定)或其他。

python regex glob
2个回答
0
投票

您需要接受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']


0
投票
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'] 以获取完整参考。

© www.soinside.com 2019 - 2024. All rights reserved.