【问题标题】:Regular expression: replace the suffix of a string ending in '.js' but not 'min.js'正则表达式:替换以“.js”结尾但不是“min.js”的字符串的后缀
【发布时间】:2010-09-30 14:40:48
【问题描述】:

假设 infile 是一个保存输入文件名的变量,类似地是输出文件的 outfile。如果 infile 以 .js 结尾,我想用 .min.js 替换,这很容易(我认为)。

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

但我的问题是,如果 infile 以 .min.js 结尾,那么我不希望发生替换。 (否则,我将得到 .min.min.js)如何使用正则表达式来完成此操作?

PS:这不是家庭作业。如果你好奇这是做什么用的:这是一个小型 python 脚本,用于对目录中的 JavaScript 文件进行大规模压缩。

【问题讨论】:

    标签: python regex


    【解决方案1】:

    您想做一个否定的后向断言。例如,

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

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

    【讨论】:

    • 正是我要说的。
    【解决方案2】:

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

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

    【讨论】:

    • 是的,我知道,但是这个问题为我提供了一个了解更多关于正则表达式的好机会。
    猜你喜欢
    • 2022-01-09
    • 2019-02-21
    • 1970-01-01
    相关资源
    最近更新 更多