Python-替换不适用于列表中的特殊字符

时间:2018-11-29 19:58:19

标签: python python-3.x

我正在尝试替换{\xad\xa。但是下面的代码不能代替它。我想弄清楚为什么不删除它?我什至尝试了逃脱字符。有什么建议吗?谢谢。

lista = ['ISBN{124123{A{112','ISBN{124312412412{D{2352342','AGEWE21\xad13\xadC\xad93872\xa0']
lista = [i for i in lista if not i.replace("\{", "-").replace("\\xad", "-").replace("\\xa", "-").isalpha()]
lista

寻找这样的最终输出:

['ISBN-124123-A-112','ISBN-124312412412-D-2352342','AGEWE21-13-C-93872-0']

3 个答案:

答案 0 :(得分:2)

查看构造元素:

[i for i in lista if ...

您检查了字符串的isalpha适用性,但保留给列表的是i原始值!

相反,您想要保留更改后的i的值;只需进行任何现有的替换,而完全忘记isalpha检查即可。

[i.replace("\{", "-").replace("\xad", "-").replace("\xa", "-") for i in lista]

请注意,如果字符串中没有出现特殊字符,则只需在最终列表中获取原始字符即可。

答案 1 :(得分:0)

使用单个反斜杠表示文字字符串,并且您无需检查它是否为alpha,因为在您的情况下它始终为false。

const uniqueBy = prop => list => {
    const uniques = {}
    return list.reduce(
        (result, item) => {
            if (uniques[item[prop]]) return result
            uniques[item[prop]] = item
            return [...result, item]
        },
        [],
    )
}

const uniqueById = uniqueBy('id')

uniqueById([
    { id: 1, name: 'one' },
    { id: 2, name: 'two' },
    { id: 1, name: 'one' },
    { id: 3, name: 'three' }
])

答案 2 :(得分:0)

尝试一下

lista = ['ISBN{124123{A{112', 'ISBN{124312412412{D{2352342', 
'AGEWE21\xad13\xadC\xad93872\xa0']
print([i.replace("{", "-").replace("\xad", "-").replace("\xa0", "") for i in lista])

它将打印

['ISBN-124123-A-112', 'ISBN-124312412412-D-2352342', 'AGEWE21-13-C-93872']