2010-09-14 59 views
1

說我有文本'C:\ somedir \ test.log',我想用'somedir \ logs'替換'somedir'。Python正則表達式問題

所以我想從去 'C:\ somedir \ test.log中' 到 'C:\ somedir \日誌\ test.log中'

此使用重新庫和應用re.sub我該怎麼辦?

到目前爲止,我已經試過這樣:

find = r'(C:\\somedir)\\.*?\.log' 
repl = r'C:\\somedir\\logs' 
print re.sub(find,repl,r'random text ... C:\somedir\test.log more \nrandom \ntext C:\somedir\test.xls...') 

但我只是得到 'C:\ somedir \日誌'

回答

2

你需要爲了引入不同分組的更換工作,只要你想,然後需要參考該組與替換式。另一個例子見Python's re.sub documentation

嘗試:

find = r'C:\\somedir\\(.*?\.log)' 
repl = r'C:\\somedir\\logs\\\1' 
print re.sub(find,repl,r'random text ... C:\somedir\test.log more \nrandom \ntext C:\somedir\test.xls...') 

這導致輸出:

'random text ... C:\somedir\logs\test.log more \nrandom \ntext C:\somedir\test.xls...' 
+0

謝謝。這正是我想到的。 – Greg 2010-09-14 20:37:55

4

你應該使用os.path庫做到這一點。具體而言,os.path.joinos.path.split

這樣它就可以在所有操作系統上工作,並且會考慮邊緣情況。

+0

你'是對的,但出於好奇,我怎麼用re.sub做到這一點? – Greg 2010-09-14 20:19:48

2

ikanobori是正確的,但你也不應該使用re來進行簡單的字符串替換。

r'C:\somedir\test.log'.replace('somedir', r'somedir\logs') 
+0

我更新了我的示例以說明爲什麼這不起作用。無論如何,我很好奇如何用re.sub做到這一點。 – Greg 2010-09-14 20:20:26

1

好吧,如果你真的想辦法用正則表達式來做到這一點,這裏有一個:

find = r'(C:\\somedir\\.*?\.log)' 
def repl(match): 
    return match.groups()[0].replace('somedir', r'somedir\logs') 
s = r'random text ... C:\somedir\test.log more \nrandom \ntext C:\somedir\test.xls...' 
print re.sub(find, repl, s)