当我尝试用另一个字符串替换字符串时,它并不总是会发生在re.sub方法中。re.sub in python并不总是替换字符串
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>"
请问谁能说清楚原因?
如果你打印'time.groups()[0]',你会发现你的正则表达式并没有抓住'09:38:27 + 01:00'。我不知道为什么(而且我不打算通过这个可怕的东西来解决问题并找出答案)。 – mgilson
我没有时间研究你的问题,但我强烈建议http://www.regex101.com/设计你的表情,应该有所帮助。 –
你真的想要简化这个表达式; ''[:] {1}'只是一个非常详细的方式来表示':';例如完全匹配一个冒号。同样,不需要在括号中包括一个'\ d'('[\ d]'与'\ d'相同)。 '\ d \ d'稍短于\ d {2}'。 –