环顾四周,re.sub()

时间:2015-04-09 13:18:56

标签: python regex lookaround

我想知道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&lt; 0&gt;”到“\ g&lt; 1&gt;”它不起作用。 结果是“890,890,890,890”。 为什么? 我想知道如何捕获和替换re.sub()和前瞻机制是如何工作的。

1 个答案:

答案 0 :(得分:1)

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

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

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