在Python的re
模块中找不到相应的PEP或错误。
是否有人知道是否计划修复以下内容?
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'
,而不是'>'
。
答案 0 :(得分:2)
我知道的唯一解决方法是不使用原始字符串替换文本,而是允许正常的字符串评估将\x3e
转换为>
。这是有效的,因为正如您所指出的,python字符串确实支持这样的序列。
>>> import re
>>> re.sub(r'\x3c', '\x3e', '\x3c')
'>'
这意味着在更复杂的替换文本中,您需要更多的转义,这可能会降低其可读性,但至少它是有效的。
我不知道是否有任何改善计划的计划。我看了python 3.4 re module(在dev下)的现有文档,没有提到包括这种支持。
但是,如果您需要更换更复杂的逻辑,则可以为repl
的{{1}}参数传递函数而不是替换文本。