2015-12-09 3 views
0

Я хочу изменить следующую строкуКак заменить символ в строку, используя регулярное выражение

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

Однако это не сработало.

ответ

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

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 как:

Теперь создайте дату, как вы хотите:

new_text = search[0:4] + "-" + search[4:6] + "-" + search[6:8] 

Так new_text будет:

2015-12-04

Подставит это new_text вместо ранее строк с помощью `повторно.к югу()

text = re.sub(search,new_text,text) 

text Так что теперь будет:

^MyLog \ .2015-12-04 \ - \ d {2} \: \ d {2} \: \ d {2} \. gc \ .log \ .gz $