在看<<python基础教程>>的时候有个地方看不懂
>>> import re
>>> emphasis_patten = re.compile(r'''
\*
(
[^\*]+
)
\*
''',re.VERBOSE)
>>> emphasis_patten
<_sre.SRE_Pattern object at 0x02076B60>
>>> re.sub(emphasis_patten, r'<em>\1</em>', 'hello, *world*!')
'hello, <em>world</em>!'
不知道为什么\1就把world保存下来了,后来多尝试几次终于懂了
>>> emphasis_patten = re.compile(r'''
\*
(w)
(o)
([^\*]+)
\*
''',re.VERBOSE)
>>> re.sub(emphasis_patten, r'<em></em>', 'hello, *world*!')
'hello, <em></em>!'
>>> re.sub(emphasis_patten, r'<em>\0</em>', 'hello, *world*!')
'hello, <em>\x00</em>!'
>>> re.sub(emphasis_patten, r'<em>\1</em>', 'hello, *world*!')
'hello, <em>w</em>!'
>>> re.sub(emphasis_patten, r'<em>\2</em>', 'hello, *world*!')
'hello, <em>o</em>!'
>>> re.sub(emphasis_patten, r'<em>\3</em>', 'hello, *world*!')
'hello, <em>rld</em>!'
所谓的\1其实就是匹配模式的第一个组,让其替换的时候保存下来,如果要在替换的时候保存第二个组可以写\2
组就是放置在圆括号内的子模式, re.VERBOSE标志允许在模式中添加空白(空白字符,tab,换行符,等等),re则会忽略它们