繁体   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