如何使用正则表达式替换字符串中的字符

时间:2015-12-09 10:52:48

标签: python regex

我想更改以下字符串

^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)

然而这不起作用。

2 个答案:

答案 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 \。广州$