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

问题描述:

我有一个字符串,我试图解析一些标记,通​​常这样格式化。正则表达式匹配字符串之间的单个字符

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

我想在[名单]标签内匹配的星号,所以我可以应用re.sub他们为[**]但我无法形成一个表达式来抓住他们。到目前为止,我有:

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

此获取列表内的一切,但我不能想出一个办法来缩小它仅在星号。任何建议将大量赞赏。

+0

我理解它是否正确,并且想匹配'[\ * *] [\ *]'? – DAXaholic

+0

不,我想匹配'*' – mmkm

+0

您可以在替换零件中使用lambda。您只需通过匹配并使用'.replace('*','**')' –

您可以使用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正则表达式来进行转义。

+0

这很完美,非常感谢! – mmkm