猿问

用 b 标签替换 ** 封闭的文本

我有一个字符串。

"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'\*\*([^*]+)\*\*',&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;lambda g: f'<b>{g.group(1).upper()}</b>',&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inp)# 'This is an <b>EXAMPLE</b> sentence. It is <b>AWESOME</b>.'lambda 函数是用正则表达式结果对象调用的,因此g.group(1)等效于\1,即模式中的第一个捕获组。当然,作为一个字符串。我们只是调用.upper()它使其变成大写。
随时随地看视频慕课网APP

相关分类

Python
我要回答