2015-02-09 78 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)