少重复你自己的话回复sub带列表

2024-05-08 18:13:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要对列表中的每个元素应用一些regex替换。我写了一个函数来减少重复。不管怎样,还是有太多的重复。我如何优化它?你知道吗

def cleanlist(mylist, regex, substitution):
    tmp_list = mylist
    cleaned_list = [re.sub(regex, substitution, line) for line in tmp_list]
    return cleaned_list


create_table_parts = cleanlist(create_table_parts, "(SET).+?(\n)", "\n") 
create_table_parts = cleanlist(create_table_parts, "(__|\(__).*?\n|(^\)|(?<=\n)(\n))", "")
create_table_parts = cleanlist(create_table_parts, "\"", "")
create_table_parts = cleanlist(create_table_parts, "(?<=CREATE\sTABLE\s).+?(\.)", "") 
create_table_parts = cleanlist(create_table_parts, "(PRIMARY\sKEY\s).+?(\n)|(FOREIGN\sKEY\s).+?(\n)|", "")
create_table_parts = cleanlist(create_table_parts, "(CREATE_INDEX\s).+?(\n)", "") 

Tags: 元素列表createlinetabletmplistregex
1条回答
网友
1楼 · 发布于 2024-05-08 18:13:54

将您的模式放入列表并循环:

patterns = [
    ("(SET).+?(\n)", "\n"),
    ("(__|\(__).*?\n|(^\)|(?<=\n)(\n))", ""),
    ("\"", ""), ("(?<=CREATE\sTABLE\s).+?(\.)", ""),
    ("(PRIMARY\sKEY\s).+?(\n)|(FOREIGN\sKEY\s).+?(\n)|", ""),
    ("(CREATE_INDEX\s).+?(\n)", "")
]

for patt, sub in patterns:
    create_table_parts = cleanlist(create_table_parts, patt, sub)

您甚至可以使用reduce()而不是for循环:

create_table_parts = reduce(lambda ctp, patt: cleanlist(ctp, *patt),
                            patterns, create_table_parts)

但这是一个私人电话,无论是否更具可读性。你知道吗

相关问题 更多 >