re.sub()文档误解

时间:2016-08-10 19:12:20

标签: python regex python-3.x python-3.5

我刚开始学习正则表达式和re.sub()州的文档:

  

在版本3.5中更改:将不匹配的组替换为空   字符串。

     

从版本3.5开始不推荐使用,将在版本3.6中删除:未知   逃脱包括' \'和ASCII字母现在提出弃用   警告并将在Python 3.6中禁止。

是否弃用了re.sub()?那我该怎么用?

2 个答案:

答案 0 :(得分:2)

你误解了文档。 re.sub()功能未弃用。弃用警告涉及特定语法

re.sub() documentation早些时候你会发现这个:

  

\&之类的未知逃脱将一个人留下。

如果您使用未知转义 ASCII字母,则转义将不再被忽略,您将收到警告。这适用于re.sub()替换模式到正则表达式模式。有关正则表达式模式语法的部分中存在相同的警告。

版本3.5 行中的更改也涉及re.sub()的工作原理。当\number反向引用没有匹配组时,不是引发异常,而是在该位置插入一个空字符串。

答案 1 :(得分:1)

这两个条目无关,re.sub 将被弃用。

如果对未参与匹配的捕获组使用反向引用,则3.5 re.sub之前的Python版本会失败。请参阅Empty string instead of unmatched group error SO问题。

发生故障的example

import re
old = 'regexregex'
new = re.sub(r'regex(group)?regex', r'something\1something', old)
print(new) # => fail as there is no "group" in between "regex" and "regex" in "regexregex"
#    and Group 1 was not initialized with an empty string, i.e. remains null

至于第二个,它只表示如果你使用 unknown来表示正则表达式引擎文字反斜杠后跟一个ASCII字符,就会发出警告(后来被禁止)。之前在Python 2.x到3.5,print(re.sub(r'\j', '', 'joy')) prints oy中忽略了反斜杠。因此,这些将在Python 3.6中被禁止。