我有套装
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)
不起作用
答案 0 :(得分:1)
此任务不需要这么复杂的正则表达式。只需使用集合理解的两个替换:
List Box
毕竟,如果你想删除括号之间的所有东西,我想你可以简单地使用一个否定的字符类如下:
DoCmd.GoToRecord , , acNewRec
DoCmd.RunCommand acCmdSaveRecord
Me.MyList.Requery
答案 1 :(得分:1)
字符串是不可变的。您无法就地替换字符串。修改集合的正确方法是删除有问题的元素并输入正确的版本,或者创建一个全新的集合。后一种方法是单行的:
set1 = set(re.sub("([\(\[]).*?([\)\]])", "\g<1>\g<2>", str(element)) for element in set1)
答案 2 :(得分:0)
你可以试试这个:
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?'}
答案 3 :(得分:0)
这是另一种选择
res = {re.sub('(:AMide)|(:dkja)', '', s) for s in set1}
{re.sub(']|\[', '', t) for t in res}
输出为:
>>>> {'*klj?', 'DKJ?', 'JKLJS?', 'TRered?', 'abkjld:Sure:STe?', 'bl:VOLTe?'}