如何在没有None的情况下获得正则表达式匹配



我正在尝试找到与Regex匹配的模式。用例如下:

listStrings1 = ['abc','def', 'ghi']
listSubstrings1 = ['a', 'b', 'e']

listStrings1是字符串输入,listSubstrings1是需要匹配的模式。所以输出应该看起来像

['a', 'b'], ['b'], []

但现在我变得像

['a', 'b', None], ['b', None, None], [None, None, None]

以下是我迄今为止尝试的

def research(substring, string):
match = re.search(substring, string)
emptystr = ''
if match is not None:
return emptystr
else:
return substring
def substringsearch(sublist, string):
matchlist = list(map(lambda y: research(y, string), sublist ))
return matchlist
listm1 = list(map(lambda x: substringsearch(listSubstrings1, x), listStrings1))
print(listm1)

时间也是另一个关键因素,因为字符串输入和子字符串输入的大小约为100k,所以如果可能的话,不使用循环。

感谢您的帮助。谢谢

我不确定这个解决方案的优化程度,但它的工作原理以及易于理解和实现。

listStrings1 = ['abc', 'def', 'ghi']
listSubstrings1 = ['a', 'b', 'e']
all_matches = []
for s in listStrings1:
matches = []
for x in listSubstrings1:
if x in s:
matches.append(x)
all_matches.append(matches)
print(all_matches)

输出:

[['a', 'b'], ['e'], []]

这段代码可以简化为一行代码,但我认为这样更容易理解。

只需在生成的map对象上使用内置的filter()函数,然后将其转换为列表:

listm1 = list(filter(None, map(lambda x: substringsearch(listSubstrings1, x), listStrings1)))

最新更新