环顾四周 re.sub()

Look Around and re.sub()

我想知道 re.sub() 的工作原理。 下面的例子是我正在看的一本书里的。

我希望“1234567890”为“1,234,567,890”。

pattern = re.compile(r"\d{1,3}(?=(\d{3})+(?!\d))")
pattern.sub(r"\g<0>,", "1234567890")
"1,234,567,890"

然后,我把“\g<0>”改成了“\g<1>”,还是不行。 结果是“890,890,890,890”。 为什么? 我想确切地知道 re.sub() 和前瞻机制的捕获和替换是如何工作的。

您重复了 890,因为它是第 1 组 (= \g<1>),并且您用最后捕获的第 1 组(890)替换了每 3 位数字。

这里还有一件事是 (\d{3})+,它也逐个捕获 3 位数字组直到结束(因为 (?!\d) 条件),并且只放置最后一个 将字符组 捕获到第 1 组。您正在使用它来替换输入字符串中的每个 3 位数字块。

请参阅 regex101.com 处的可视化。