正则表达式匹配字符串之间的单个字符
问题描述:
我有一个字符串,我试图解析一些标记,通常这样格式化。正则表达式匹配字符串之间的单个字符
'[*]\r\n[list][*][*][/list][*]text[list][*][/list]'
我想在[名单]标签内匹配的星号,所以我可以应用re.sub他们为[**]但我无法形成一个表达式来抓住他们。到目前为止,我有:
match = re.compile('\[list\].+?\[/list\]', re.DOTALL)
此获取列表内的一切,但我不能想出一个办法来缩小它仅在星号。任何建议将大量赞赏。
答
您可以使用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]
注意,一个]
之外的字符类的没有在Python re
正则表达式来进行转义。
+0
这很完美,非常感谢! – mmkm
我理解它是否正确,并且想匹配'[\ * *] [\ *]'? – DAXaholic
不,我想匹配'*' – mmkm
您可以在替换零件中使用lambda。您只需通过匹配并使用'.replace('*','**')' –