"This is an ** example ** sentence. It is ** awesome **."
我想**.**用<b>.</b>保留匹配的通配符文本替换所有实例.
结果应该是:
"This is an <b>example</b> sentence. It is <b>awesome</b>."
我该怎么做呢?
翻过高山走不出你
浏览 117回答 1
1回答
哔哔one
您可以使用捕获组()来匹配**两侧包含的文本(您必须在正则表达式中使用 like 转义它们\*,因为否则它们是正则表达式控制字符)。然后,您可以使用以下方法在替换文本中引用捕获的组\1:import reinp = "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()它使其变成大写。