正则表达式匹配字符串之间的单个字符

时间:2016-07-16 11:02:23

标签: python regex

我有一个带有一些标记的字符串,我正在尝试解析,通常是这样格式化的。

'[*]\r\n[list][*][*][/list][*]text[list][*][/list]'

我想匹配[list]标签中的星号,所以我可以将它们重新设置为[**],但是我很难形成一个表达式来抓住它们。到目前为止,我有:

match = re.compile('\[list\].+?\[/list\]', re.DOTALL)

这可以获得列表中的所有内容,但我无法找到一种方法将其缩小到单独的星号。任何建议都会受到大力赞赏。

1 个答案:

答案 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正则表达式中进行转义。