在我的大脑中,以下内容:
>>> re.sub('([eo])', '_\1_', 'aeiou')
应该返回:
'a_e_i_o_u'
而是返回:
'a_\x01_i_\x01_u'
我确定我有脑痉挛,但我不能为我的生活找出错误。
答案 0 :(得分:4)
\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 regex HOWTO中的The Backslash Plague:
如前所述,正则表达式使用反斜杠字符(
'\'
)来表示特殊表单或允许使用特殊字符而不调用它们的特殊含义。这与Python在字符串文字中用于相同目的的相同字符的使用相冲突。
答案 1 :(得分:2)
使用原始字符串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'