我正在尝试找到与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)))