我想更改以下字符串
^mylog\.20151204\-\d{2}\:\d{2}\:\d{2}\.gc\.log\.gz$
到此:
^mylog\.2015-12-04\-\d{2}\:\d{2}\:\d{2}\.gc\.log\.gz$
(20151204
仅更改为2015-12-04
)
我可以通过以下方式完成:
re.sub("20151204", "2015-12-04", string)
,其中
string= ^mylog\.20151204\-\d{2}\:\d{2}\:\d{2}\.gc\.log\.gz$
但价值20151204
是一个日期,并且会发生变化,我不能硬编码。
我试过了:
re.sub("2015\\d{2}\\d{2}", "2015\-\\d{2}\-\\d{2}", string)
然而这不起作用。
答案 0 :(得分:1)
您需要在模式中使用捕获组,并在替换中使用反向引用:
result = re.sub("2015(\\d{2})(\\d{2})", "2015-\\1-\\2", string)
^ ^^ ^ ^^^ ^^^
// => ^mylog\.2015-12-04\-\d{2}\:\d{2}\:\d{2}\.gc\.log\.gz$
请参阅IDEONE demo
如果您需要在^mylog\.
之后的任何一年匹配,则可以使用
result = re.sub(r"^\^mylog\\\.(\d{4})(\d{2})(\d{2})", r"^mylog\.\1-\2-\3", string)
请参阅another demo
答案 1 :(得分:0)
您首先需要找到日期,然后将其转换为所需格式,然后替换旧文本中的新字符串。
请参阅以下代码:
text = "^mylog\.20151204\-\d{2}\:\d{2}\:\d{2}\.gc\.log\.gz$"
search = re.search(r'\d{4}\d{2}\d{2}',text)
search = search.group()
你得到search
:
20151204
现在根据需要创建日期:
new_text = search[0:4] + "-" + search[4:6] + "-" + search[6:8]
所以new_text
将是:
2015年12月4日
现在使用`re.sub()
替换此new_text
代替前面的字符串
text = re.sub(search,new_text,text)
所以现在text
将是:
^ mylog \ .2015-12-04 \ - \ d {2} \:\ d {2} \:\ d {2} \ GC \的.log \。广州$