正则表达式:替换以'.js'结尾但不是'min.js'的字符串的后缀

时间:2009-01-09 22:47:17

标签: python regex

假设infile是一个包含输入文件名称的变量,同样也是输出文件的outfile。如果infile以 .js 结尾,我想用 .min.js 替换,这很容易(我认为)。

outfile = re.sub(r'\ b.js $','。min.js',infile)

但我的问题是,如果infile以 .min.js 结尾,那么我不希望替换发生。 (否则,我最终将使用 .min.min.js )如何使用正则表达式实现此目的?

PS:这不是作业。如果你很好奇这是为了什么:这是一个小的python脚本在目录中对JavaScript文件进行大规模压缩。

2 个答案:

答案 0 :(得分:9)

你想做一个负面的后视断言。例如,

outfile = re.sub(r"(?<!\.min)\.js$", ".min.js", infile)

您可以在此处找到有关此内容的更多信息:http://docs.python.org/library/re.html#regular-expression-syntax

答案 1 :(得分:3)

对于这么简单的任务,不需要regexp。字符串方法可以更具可读性,例如:

if filename.endswith('.js') and not filename.endswith('.min.js'):
    filename= filename[:-3]+'.min.js'