0

我想知道 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() 和前瞻机制的捕获和替换是如何工作的。

4

1 回答 1

1

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

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

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

于 2015-04-09T13:21:43.670 回答