除去s中元素的特定部分

2024-09-29 02:27:42 发布

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

我有电视机

set1={'*klj?', 'bl:VOLTe?', 'abkjld:Sure:STe?', 'JKLJS?', 'TRered[:AMide]?', 'DKJ[:dkja]?'}

我想让这套衣服看起来像

set1={'*klj?', 'bl:VOLTe?', 'abkjld:Sure:STe?', 'JKLJS?', 'TRered?','DKJ?'}

我想去掉集合中的[:AMide][:dkja]。你知道吗

我想用正则表达式

到目前为止我所知道的是

set2={}
    for element in set:
        x=re.sub("([\(\[]).*?([\)\]])", "", str(element))
        set2.add(x)

这样就去掉了[]和里面的内容,但不能正确地重新创建集合,即set2.add(x)不起作用


Tags: addelementblstesureset1set2volte
3条回答

字符串是不可变的。不能就地替换字符串。修改集合的正确方法是删除有问题的元素并放入正确的版本,或者创建一个全新的集合。后一种方法是一行:

set1 = set(re.sub("([\(\[]).*?([\)\]])", "\g<1>\g<2>", str(element)) for element in set1)

这个任务不需要这么复杂的正则表达式。只需使用两个替换集:

In [10]: {i.replace('[:AMide]', '').replace('[:dkja]', '') for i in set1}
Out[10]: {'*klj?', 'DKJ?', 'JKLJS?', 'TRered?', 'abkjld:Sure:STe?', 'bl:VOLTe?'}

毕竟,如果您想删除方括号之间的所有内容,我认为您可以简单地使用一个否定字符类,如下所示:

In [11]: import re

In [12]: {re.sub(r'\[[^]]+\]', r'', i) for i in set1}
Out[12]: {'*klj?', 'DKJ?', 'JKLJS?', 'TRered?', 'abkjld:Sure:STe?', 'bl:VOLTe?'}

你可以试试这个:

import re
set1={'*klj?', 'bl:VOLTe?', 'abkjld:Sure:STe?', 'JKLJS?', 'TRered[:AMide]?', 'DKJ[:dkja]?'}
new_set = {re.sub('\[\:[a-zA-Z]+\]', '', i) for i in set1}

输出:

{'*klj?', 'abkjld:Sure:STe?', 'DKJ?', 'JKLJS?', 'TRered?', 'bl:VOLTe?'}

相关问题 更多 >