文字列を別の文字列に置き換えようとすると、re.subメソッドで常に発生するとは限りません。
sentence = '<date>2004/12/01</date>T09:38:27+01:00'+
'Wed, <date>2012/9/05</date> 10:55:17 UTC %3C%3C%3C'
time_identifier = u'(?<=[\s\.,T])([\d]{2}[:]{1}[\d]{2}([:]{1}[\d]{2})*[\s\.,+]*(UTC|GMT|CEST|EDT|IST|BST)*(\d\d:\d\d)*)(?=[\s\.,T]|\Z)|'\
u'(?<=\A)([\d]{2}[:]{1}[\d]{2}([:]{1}[\d]{2})*[\s\.,+]*(UTC|GMT|CEST|EDT|IST|BST)*(\d\d:\d\d)*)(?=[\s\.,T]|\Z)'
time = re.search(time_identifier, sentence, flags=re.U|re.I)
if time:
try:
sentence = re.sub(time.groups()[0], '<time>%s</time>'%time.groups()[0], sentence, flags=re.U|re.I)
except:
sentence = re.sub(time.groups()[4], '<time>%s</time>'%time.groups()[4], sentence, flags=re.U|re.I)
上記の例では、文の出力は次のようになります。
<date>2004/12/01</date>T<time>09:38:27+01:00<time>
Wed, <date>2012/9/05</date> <time>10:55:17 UTC</time> %3C%3C%3C
ただし、re.subメソッドは、元の文の「09:38:27 + 01:00」を次のように置き換えません。
"<time>09:38:27+01:00</time>"
誰かがこの理由を明確にできますか?