为什么在python中re.sub在替换后添加一个空格?如何摆脱空间?

vin*_*h s 1 python string

import re
def transformrec(record):
    new_record = re.sub(r"([\d-]+\,)",r"+1-\1\0", record)
    search_pa=re.search(r"(\,[\d-]+\,)",record)
    #print(search_pa[0])
    #print(search_pa[1])
    print(new_record)

print(transformrec("Sabrina Green,802-867-5309,System Administrator"))
Run Code Online (Sandbox Code Playgroud)

输出

O/P : Sabrina Green,+1-802-867-5309, System Administrator.
Run Code Online (Sandbox Code Playgroud)

在这种情况下,数字 802-867-5309 后面有一个额外的空格,

Nic*_*ick 5

这不是一个空间,它是一个NUL字符。从手册

\number

匹配相同号码组的内容。组从 1 开始编号。例如,(.+) \1匹配'the the''55 55',但不匹配'thethe'(注意组后的空格)。此特殊序列只能用于匹配前 99 个组中的一个。 如果 number 的第一位为 0,或 number 为 3 个八进制位长,则不会被解释为组匹配,而是被解释为八进制值 number 的字符。在字符类的 '[' 和 ']' 内部,所有数字转义都被视为字符。

\0的替代品中有一个被解释为NUL字符的。修复方法只是将其删除。

new_record = re.sub(r"([\d-]+\,)",r"+1-\1", record)
Run Code Online (Sandbox Code Playgroud)