次の点を考慮してください。
>>> import re
>>> a = "first:second"
>>> re.findall("[^:]*", a)
['first', '', 'second', '']
>>> re.sub("[^:]*", r"(\g<0>)", a)
'(first):(second)'
re.sub()
の動作は最初はより理にかなっていますが、re.findall()
の動作も理解できます。結局のところ、 コロン以外の文字のみで構成されるfirst
との間の空の文字列 (正確にはゼロ) に一致させることができますが、同じように動作しないのはなぜでしょうか?:
re.sub()
最後のコマンドの結果は(first)():(second)()
?