我有以下代码:
import re
s = "Example {String}"
replaced = re.sub('{.*?}', 'a', s)
print replaced
哪些打印:
Example a
有没有办法修改正则表达式以便打印:
Example {a}
那就是我只想替换。*部分并保留所有周围的字符。但是,我需要周围的字符来定义我的正则表达式。这可能吗?
python大神给出的解决方案
做到这一点的两种方法,要么捕获您的前缀和后缀,要么使用lookbehinds和lookahead。
# 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)