Python re.sub不返回匹配

Python re.sub不返回匹配,python,regex,Python,Regex,在我的脑海里,有以下几点: >>> re.sub('([eo])', '_\1_', 'aeiou') 应返回: 'a_e_i_o_u' 相反,它返回: 'a_\x01_i_\x01_u' 我肯定我的大脑抽筋了,但我一辈子都搞不清楚到底出了什么问题。\1以Python字符串文本生成\x01。双斜杠,或使用原始字符串文字: >>> import re >>> re.sub('([eo])', '_\1_', 'aeiou') 'a_\x0

在我的脑海里,有以下几点:

>>> re.sub('([eo])', '_\1_', 'aeiou')
应返回:

'a_e_i_o_u'
相反,它返回:

'a_\x01_i_\x01_u'

我肯定我的大脑抽筋了,但我一辈子都搞不清楚到底出了什么问题。

\1
以Python字符串文本生成
\x01
。双斜杠,或使用原始字符串文字:

>>> import re
>>> re.sub('([eo])', '_\1_', 'aeiou')
'a_\x01_i_\x01_u'
>>> re.sub('([eo])', '_\\1_', 'aeiou')
'a_e_i_o_u'
>>> re.sub('([eo])', r'_\1_', 'aeiou')
'a_e_i_o_u'
请参见Python正则表达式HOWTO:

如前所述,正则表达式使用反斜杠字符(
'\'
)来表示特殊形式或允许在不调用特殊含义的情况下使用特殊字符。这与Python在字符串文本中出于相同目的使用相同字符相冲突


\1
以Python字符串文本生成
\x01
。双斜杠,或使用原始字符串文字:

>>> import re
>>> re.sub('([eo])', '_\1_', 'aeiou')
'a_\x01_i_\x01_u'
>>> re.sub('([eo])', '_\\1_', 'aeiou')
'a_e_i_o_u'
>>> re.sub('([eo])', r'_\1_', 'aeiou')
'a_e_i_o_u'
请参见Python正则表达式HOWTO:

如前所述,正则表达式使用反斜杠字符(
'\'
)来表示特殊形式或允许在不调用特殊含义的情况下使用特殊字符。这与Python在字符串文本中出于相同目的使用相同字符相冲突

使用原始字符串r:

re.sub('([eo])', r'_\1_', 'aeiou')
输出:

In [3]: re.sub('([eo])', r'_\1_', 'aeiou')
Out[3]: 'a_e_i_o_u'
In [4]: "\1"
Out[4]: '\x01'   
In [5]: r"\1"
Out[5]: '\\1'
使用原始字符串r:

re.sub('([eo])', r'_\1_', 'aeiou')
输出:

In [3]: re.sub('([eo])', r'_\1_', 'aeiou')
Out[3]: 'a_e_i_o_u'
In [4]: "\1"
Out[4]: '\x01'   
In [5]: r"\1"
Out[5]: '\\1'

大脑确实抽筋了。谢谢你,大脑确实抽筋了。非常感谢。