环顾四周 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 处的可视化。
我想知道 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 处的可视化。