簡體   English   中英

Python正則表達式問題

[英]Python Regular Expression Question

說我有文字“ C:\\ somedir \\ test.log”,我想用“ somedir \\ logs”替換“ somedir”。

所以我想從'C:\\ somedir \\ test.log'轉到'C:\\ somedir \\ logs \\ test.log'

我該如何使用re庫和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 \\ logs'

您應該使用os.path庫來執行此操作。 具體來說,是os.path.joinos.path.split

這樣,它就可以在所有操作系統上運行,並且可以解決一些極端情況。

ikanobori是正確的,但您也不應該將re用於簡單的字符串替換。

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

您需要引入其他分組,以使替換根據需要進行工作,然后需要使用替換表達式引用該組。 有關另一個示例,請參見Python的re.sub文檔

嘗試:

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...'

好吧,如果您真的想要一種使用正則表達式的方法,請執行以下操作:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM