2015-04-23 21 views
0

我的文字看起來是這樣的:應用re.sub替換比需要更多的文字

blah blah [text in brackets] asda asdasd [more text in brackets 1234] blah 

,我想用「括號」

blah blah BRACKET asda asdasd BRACKET blah 

我正則表達式是這樣的替換括號之間的所有文本:

re.sub('\[.*\]','BRAKCET',text) 

其生產

blah blah BRACKET blah 

每當字符串中有另一個]時。

我該如何解決這個問題?

回答

1

你是貪婪匹配的正則表達式

即[。*]嘗試匹配LONGEST字符串可能在'['和']'之間。 你需要使用一個非貪婪的正則表達式,通過添加' '

>>> text = '''blah blah [text in brackets] asda asdasd [more text in brackets 1234] blah''' 
>>> re.sub('\[.*?\]','BRAKCET',text) 
'blah blah BRAKCET asda asdasd BRAKCET blah' 

看' 懶惰,而不是貪婪'下面的鏈接瞭解更多信息

http://www.regular-expressions.info/repeat.html

0

使用非貪婪選項:?

如:

re.sub('[.*?]','BRAKCET',text) 
0

您需要使用無貪心令牌:

>>> s='blah blah [text in brackets] asda asdasd [more text in brackets 1234] blah' 
>>> import re 
>>> re.sub('\[.*?\]','BRAKCET',s) 
'blah blah BRAKCET asda asdasd BRAKCET blah' 
+0

他逃脫括號。它只是沒有出現,因爲他在問題中使用了錯誤的標記。 – Barmar

+0

@Barmar哎呀!是啊修好了!謝謝! – Kasramvd