2

找不到对应的 PEP 或 Pythonre模块中的一个问题的错误。

有谁知道是否计划修复以下问题?

来自正则表达式.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'在读取时变为,而不是'>'.

4

1 回答 1

2

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

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

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

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

但是,如果您需要更复杂的替换逻辑,您可以为 的repl参数传递一个函数而不是替换文本re.sub

于 2014-03-13T15:15:47.077 回答