Python - 替换部分正则表达式?

时间:2015-02-09 18:55:57

标签: python regex

我有以下代码:

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

打印哪些:

Example a

有没有办法修改正则表达式以便打印:

Example {a}

那就是我想只替换。*部分并保留所有周围的字符。但是,我需要周围的字符来定义我的正则表达式。这可能吗?

1 个答案:

答案 0 :(得分:5)

执行此操作的两种方法,可以捕获修复前和修复后的内容,也可以使用lookbehinds和lookaheads。

# 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)