Регулярное выражение: замените суффикс строки, оканчивающейся на '.js', но не на 'min.js'

Предположим, что infile - это переменная, содержащая имя входного файла, а также выходной файл для выходного файла. Если infile заканчивается на .js, я бы хотел заменить его на .min.js, и это достаточно просто (я думаю).

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

Но у меня вопрос в том, что если infile заканчивается на .min.js, то я не хочу, чтобы произошла подмена. (В противном случае я получу .min.min.js) Как я могу добиться этого, используя регулярное выражение?

PS: Это не домашнее задание. Если вам интересно, для чего это нужно: это небольшой скрипт на Python для массового сжатия файлов JavaScript в каталоге.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
0
1 812
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы хотите сделать утверждение отрицательного просмотра назад. Например,

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

Подробнее об этом можно узнать здесь: http://docs.python.org/library/re.html#regular-expression-syntax

Именно то, что я собирался сказать.

cletus 10.01.2009 01:54

Для таких простых задач регулярные выражения не нужны. Строковые методы могут быть более читаемыми, например:

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

да, я знал это, но этот вопрос дает мне хороший шанс узнать больше о регулярном выражении.

Kevin Le - Khnle 11.01.2009 04:47

Другие вопросы по теме