我想知道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()和前瞻机制是如何工作的。
答案 0 :(得分:1)
您重复890
因为它是第1组(= \g<1>
),并且您使用最后捕获的第1组(890
)替换每3位数。
此处还有一个问题是(\d{3})+
,它也会逐个捕获3个数字的组,直到结束(因为(?!\d)
条件),并且只将放在最后捕获的字符组中进入第1组。您正在使用它来替换输入字符串中的每个3位数块。
请参阅regex101.com处的可视化。