python re.sub与re.search无法按预期工作

时间:2014-08-18 16:32:03

标签: python regex

我正在尝试使用时间戳生成输出文件名和路径。所有部件都按预期工作,但是re.sub没有给我我想要的结果。我在这里做错了什么?

>>> a = r'\output\End-of-Day\{%Y\%m\%d\UINVDEFF securities %m.%d.%Y}.xlsx'
>>> b = re.search(r'(?P<timestamp>\{[^}]*(%[A-Za-z])[^{]*\})', a)
>>> b.group('timestamp')
'{%Y\\%m\\%d\\UINVDEFF securities %m.%d.%Y}'

>>> now
datetime.datetime(2014, 8, 18, 11, 43, 47, 55000)

>>> now.strftime(b.group('timestamp'))[1:-1]
'2014\\08\\18\\UINVDEFF securities 08.18.2014'

>>> re.sub(b.group('timestamp'), now.strftime(b.group('timestamp'))[1:-1], a)
'\\output\\End-of-Day\\{%Y\\%m\\%d\\UINVDEFF securities %m.%d.%Y}.xlsx'

期待'\输出\结束日\ 2014 \ 08 \ 18 \ UINVDEFF证券08.18.2014.xlsx'

1 个答案:

答案 0 :(得分:2)

re.sub调用将其第一个参数解释为正则表达式模式:

{%Y\\%m\\%d\\UINVDEFF securities %m.%d.%Y}

如果您只想用字符串中的另一个替换子字符串,请使用string.replace

a.replace(b.group('timestamp'), now.strftime(b.group('timestamp'))[1:-1])