首页 > 解决方案 > 使用 re.sub 清理嵌套列表

问题描述

我有一组需要清理的嵌套列表(深度不超过三个)。一个类似的例子是这样的:

test = [['qte%#', 'EKO*^'], ['eoim&', ['35ni%', 'mmie']]]

我很想运行以下命令:

re.sub(r'[^a-zA-Z\d\[\] ], '',  test)

我知道这里的问题是我需要遍历嵌套列表,但是我在保持结构时遇到了麻烦。也许还有一种更简单的方法来解决这个问题。我已经尝试过这种变化:

for a in test:
    for b in a:
        if isinstance(b, list):
            for c in b:
                c = re.sub(r'[^a-zA-Z\d\[\] ]', ' ', c)
                clean.append(c)
        else:
            print(b)
            b = re.sub(r'[^a-zA-Z\d\[\] ]', ' ', b)
            clean.append(b)

标签: regexpython-3.xlist

解决方案


该脚本将保持列表结构不变 - 只需应用该re.sub函数:

test = [['qte%#', 'EKO*^'], ['eoim&', ['35ni%', 'mmie']]]

import re

def clean(lst):
    if not isinstance(lst, list):
        return re.sub(r'[^a-zA-Z\d\[\] ]', '', lst)

    return [clean(v) for v in lst]

print( clean(test) )

印刷:

[['qte', 'EKO'], ['eoim', ['35ni', 'mmie']]]

推荐阅读