我有一个字符串。"This is an ** example ** sentence. It is ** awesome **."我想**.**用<b>.</b>保留匹配的通配符文本替换所有实例.结果应该是:"This is an <b>example</b> sentence. It is <b>awesome</b>."我该怎么做呢?
1 回答

哔哔one
TA贡献1854条经验 获得超8个赞
您可以使用捕获组()来匹配**两侧包含的文本(您必须在正则表达式中使用 like 转义它们\*,因为否则它们是正则表达式控制字符)。然后,您可以使用以下方法在替换文本中引用捕获的组\1:
import re
inp = "This is an **example** sentence. It is **awesome**."
out = re.sub(r'\*\*(.+?)\*\*', r'<b>\1</b>', inp)
# 'This is an <b>example</b> sentence. It is <b>awesome</b>.'
如果你想对刚刚隔离的组做更复杂的事情,那么你可以给 lambda 或函数作为第二个参数re.sub()。例如,要使捕获的组大写:
out = re.sub(r'\*\*([^*]+)\*\*',
lambda g: f'<b>{g.group(1).upper()}</b>',
inp)
# 'This is an <b>EXAMPLE</b> sentence. It is <b>AWESOME</b>.'
lambda 函数是用正则表达式结果对象调用的,因此g.group(1)等效于\1,即模式中的第一个捕获组。当然,作为一个字符串。我们只是调用.upper()它使其变成大写。
添加回答
举报
0/150
提交
取消