2010-10-21 74 views
-2

我有一個字符串看起來像的Python:使用正則表達式來移除某些

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

他們總是最後兩個。 – user483144 2010-10-21 14:40:21

+0

對不起,他們並不總是最後兩個。 – user483144 2010-10-21 14:49:17

+0

@ user483144:如果您有其他信息,請勿將其置於評論中,而是編輯您的問題。 – 2010-10-21 14:50:08

回答

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)' 
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=及其後的所有內容,但不是右括號。

0
import re 
re.sub(r',d=\d*,e=[^\)]*','', your_string) 
相關問題