为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

翻过高山走不出你 2022-11-29 17:11:22
我有一个字符串。"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()它使其变成大写。


查看完整回答
反对 回复 2022-11-29
  • 1 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号