2015-02-09 125 views
2

我有以下一段代碼:Python - 替換部分正則表達式?

import re 
s = "Example {String}" 
replaced = re.sub('{.*?}', 'a', s) 
print replaced 

它打印:

Example a

是否有修改的正則表達式,使其打印方式:

Example {a}

這就是我想只替換。*部分並保留所有周圍的人物。不過,我需要周圍的人物來定義我的正則表達式。這可能嗎?

+2

'應用re.sub( '{*}?', '{A}',S)'?或're.sub('({)。*?(})','\ 1a \ 2',s)' – njzk2 2015-02-09 18:57:47

回答

5

有兩種方法可以實現這一點,既可以捕捉修復前後的修復,也可以使用向後看和向後修剪。

# capture 
s = "Example {String}" 
replaced = re.sub(r'({).*?(})', r'\1a\2', s) 

# lookaround 
s = "Example {String}" 
replaced = re.sub(r'(?<={).*?(?=})', r'a', s) 

如果您捕捉你預先和後修復,你能夠使用\{capture_num}使用這些捕捉組在您的替代,例如\1\2

如果您使用環視,您基本上不會匹配那些修復前/修復後,您只需斷言他們在那裏。因此,替換隻能交換兩者之間的字母。

當然,對於這個簡單子,更好的解決方案可能是:

re.sub(r'{.*?}', r'{a}', s)