我有一个字符串看起来像这样
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)
答案 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)