Python:使用正则表达式删除某些内容

时间:2010-10-21 14:38:25

标签: python regex

我有一个字符串看起来像这样

ABC(a =2,b=3,c=5,d=5,e=Something)

我希望结果像

ABC(a =2,b=3,c=5)

最好的方法是什么?我更喜欢在Python中使用正则表达式。

抱歉,有些内容发生了变化,原始字符串已更改为

ABC(a =2,b=3,c=5,dddd=5,eeee=Something)

3 个答案:

答案 0 :(得分:3)

longer = "ABC(a =2,b=3,c=5,d=5,e=Something)"

shorter = re.sub(r',\s*d=\d+,\s*e=[^)]+', '', longer)

# shorter: 'ABC(a =2,b=3,c=5)'

当OP最终知道列表中有多少元素时,他也可以使用:

shorter = re.sub(r',\s*d=[^)]+', '', longer)

它会切断, d=及其后的所有内容,但不会剪切右括号。

答案 1 :(得分:2)

非正则表达式

>>> s="ABC(a =2,b=3,c=5,d=5,e=Something)"
>>> ','.join(s.split(",")[:-2])+")"
'ABC(a =2,b=3,c=5)'

如果你想要正则表达式总是摆脱最后2

>>> s="ABC(a =2,b=3,c=5,d=5,e=6,f=7,g=Something)"
>>> re.sub("(.*)(,.[^,]*,.[^,]*)\Z","\\1)",s)
'ABC(a =2,b=3,c=5,d=5,e=6)'

>>> s="ABC(a =2,b=3,c=5,d=5,e=Something)"
>>> re.sub("(.*)(,.[^,]*,.[^,]*)\Z","\\1)",s)
'ABC(a =2,b=3,c=5)'

如果它总是第3个,

>>> s="ABC(a =2,b=3,c=5,d=5,e=Something)"
>>> re.sub("([^,]+,[^,]+,[^,]+)(,.*)","\\1)",s)
'ABC(a =2,b=3,c=5)'

>>> s="ABC(q =2,z=3,d=5,d=5,e=Something)"
>>> re.sub("([^,]+,[^,]+,[^,]+)(,.*)","\\1)",s)
'ABC(q =2,z=3,d=5)'

答案 2 :(得分:0)

import re  
re.sub(r',d=\d*,e=[^\)]*','', your_string)