2017-07-24 79 views
1

例如:去除括號替換第一場比賽

string = '(hello) advanced technologies (2015)' 

我想刪除(你好),但保留(2015年)。 我在網上搜索,並得到:

newstring = re.sub(r'\((?:[^)(]|\([^)(]*\))*\)',"",string) 

但它同時刪除括號:

advanced technologies 

我怎樣才能改變重語句刪除僅第一個括號?

+0

順便說一句,「貪婪」在模式匹配中有一個特定的含義,那就是匹配從第一個左括號到最後一個右括號的所有內容。就你而言,也許「只更換第一場比賽」更合適。 –

回答

6

如果你真的只想要刪除的第一場比賽,你可以通過count參數sub

re.sub(r'\((?:[^)(]|\([^)(]*\))*\)', '', string, count=1) 

結果:

' advanced technologies (2015)' 

如果你真的想要的東西更花哨,喜歡養括號內的所有年份,請在您的問題中註明。

2

re.sub()具有計數參數相匹配的字母數字使用\w

import re 
string = '(hello) advanced technologies (2015)' 
newstring = re.sub(r'\(\w+\)', "", string, 1) 
print(newstring) 
# advanced technologies (2015) 
1

除了count=1答案(都好),你可以選擇第一組,如果你知道它例如總是在字符串的開頭:

assert re.sub(r'^\([^)]*\)', '', '(a)(b)') == '(b)' 

如果它幾乎在開始時可能會有類似的情況,例如是否允許空格。