Python在替换文本中支持十六进制转义

时间:2014-03-13 14:59:41

标签: python regex pep

在Python的re模块中找不到相应的PEP或错误。

是否有人知道是否计划修复以下内容?

来自regular-expressions.info

  

Python不支持替换文本中的十六进制转义   语法,即使它在字符串常量中支持\ xFF和\ uFFFF。

但它实际上支持\n\r等标准转义。

因此,例如,使用十六进制转义符不能用'<'字符替换'>'个字符:

>>> import re
>>> re.sub(r'\x3c', r'\x3e', '\x3c')
'\\x3e'

而不是'\\x3e',它应该是'>'

使用转义\n可以正常工作:

>>> re.sub(r'a', r'\n', 'a')
'\n'

提前致谢!

UPD:不使用原始字符串不是一个选项。例如,如果模式和替换字符串存储在配置文件中,那么如果我在其中写入\ x3e,则在读取时将变为'\\x3e',而不是'>'

1 个答案:

答案 0 :(得分:2)

我知道的唯一解决方法是不使用原始字符串替换文本,而是允许正常的字符串评估将\x3e转换为>。这是有效的,因为正如您所指出的,python字符串确实支持这样的序列。

>>> import re
>>> re.sub(r'\x3c', '\x3e', '\x3c')
'>'

这意味着在更复杂的替换文本中,您需要更多的转义,这可能会降低其可读性,但至少它是有效的。

我不知道是否有任何改善计划的计划。我看了python 3.4 re module(在dev下)的现有文档,没有提到包括这种支持。

但是,如果您需要更换更复杂的逻辑,则可以为repl的{​​{1}}参数传递函数而不是替换文本。