我刚开始学习正则表达式和re.sub()
州的文档:
在版本3.5中更改:将不匹配的组替换为空 字符串。
从版本3.5开始不推荐使用,将在版本3.6中删除:未知 逃脱包括' \'和ASCII字母现在提出弃用 警告并将在Python 3.6中禁止。
是否弃用了re.sub()?那我该怎么用?
答案 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中被禁止。