我有一个带有一些标记的字符串,我正在尝试解析,通常是这样格式化的。
'[*]\r\n[list][*][*][/list][*]text[list][*][/list]'
我想匹配[list]标签中的星号,所以我可以将它们重新设置为[**],但是我很难形成一个表达式来抓住它们。到目前为止,我有:
match = re.compile('\[list\].+?\[/list\]', re.DOTALL)
这可以获得列表中的所有内容,但我无法找到一种方法将其缩小到单独的星号。任何建议都会受到大力赞赏。
答案 0 :(得分:0)
您可以使用re.sub
并在替换部分中使用lambda。您将匹配传递给lambda并在匹配值上仅使用.replace('*','**')
。
以下是示例代码:
import re
s = '[*]\r\n[list][*][*][/list][*]text[list][*][/list]'
match = re.compile('\[list].+?\[/list]', re.DOTALL)
print(match.sub(lambda m: m.group().replace('*', '**'), s))
# = > [*]
# [list][**][**][/list][*]text[list][**][/list]
请参阅IDEONE demo
请注意,字符类之外的]
不必在Python re
正则表达式中进行转义。