Регулярное выражение для удаления определенного количества символов после совпадения

Я ищу простое регулярное выражение для этого,

Это ввод:

This is a sample text www.testdomainname.com/picsinsideit/stunningpictureofkays1381737242g8k4n-280x428.jpg this is also sample text

Выход:

This is a sample text www.testdomainname.com/picsinsideit/stunningpictureofkays1381737242g8k4n.jpg this is also sample text

Я хочу удалить текст -280x428, т.е. удалить 8 символов ровно перед текстом .jpg Ширина и высота будут разными для каждого изображения. поэтому я хочу найти текст .jpg после того, как он соответствует удалению 8 символов перед ним.

Я искал здесь много вопросов, но не нашел решения, пожалуйста, помогите мне.


person Alex Ms    schedule 14.10.2013    source источник
comment
Пожалуйста, укажите язык/движок регулярных выражений и укажите свои попытки решить проблему в своем вопросе.   -  person Jerry    schedule 14.10.2013
comment
Я просто хотел заменить содержимое, используя блокнот ++   -  person Alex Ms    schedule 14.10.2013


Ответы (3)


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

  • Он начинается с «-», это то же самое в регулярном выражении.

  • Затем идет ряд цифр с «x» между ними. Создайте класс символов [\dx], где \d – цифра, и сопоставьте его один или несколько раз, используя + квантификатор.

    Такой способ делает его более гибким, когда есть числа с более или менее 3 цифрами, поэтому он также заменит такие вещи, как «-1600x1200» или «-64x48».

    Если вы хотите быть более строгим в отношении шаблона, сделайте что-то вроде \d{2,4}x\d{2,4}, которое будет соответствовать только 2–4 цифрам, за которыми следует «x», а затем 2–4 цифры.

  • сопоставьте ".jpg" с \.jpg. . необходимо экранировать, так как это специальный символ в регулярном выражении.

Это приводит к

-[\dx]+\.jpg

затем замените его на ".jpg"

См. это на Regexr

person stema    schedule 14.10.2013
comment
Я не думал о большей ширине, и это меня утомило. Это было идеальное решение, которое я искал. Большое спасибо. - person Alex Ms; 14.10.2013
comment
+1 за четкое пошаговое описание, это, наконец, дает мне представление о том, как создать собственное регулярное выражение для моей конкретной ситуации. - person myfunkyside; 30.10.2016
comment
Серьезно, я хотел бы дать больше голосов! Я возился с этим в течение часа на всех этих специальных обучающих веб-сайтах, и ни один из них не объясняет это так хорошо, как вы здесь. В течение 10 минут после прочтения вашего ответа я создал собственное регулярное выражение, которое делает именно то, что мне нужно. - person myfunkyside; 30.10.2016

Не зная языка, который вы используете, и следуя тому, что вы хотите сделать, я бы предложил следующее регулярное выражение:

^(.*).{8}(\.jpg.*)$

И $1$2as замена строки.

Это просто удалит 8 символов перед каждым .jpg, как вы и хотели.

Если вы хотите быть более гибкими в отношении чисел ширины/высоты, вы также можете использовать:

^(.*)-[^-]+(\.jpg.*)$

Который в основном будет искать все между - (включая) и .jpg

person Fabian    schedule 14.10.2013

Это регулярное выражение соответствует 8 символам непосредственно перед текстом ".jpg":

.{8}(?=\.jpg)

Если вы не уверены, сколько там символов, это соответствует любому количеству символов, включая последний дефис перед «.jpg»:

-[^-]*(?=\.jpg)

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

Причудливо выглядящее выражение (?=...) — это «заглянуть вперед», которое соответствует регулярному выражению в нем, но не потребляет и не захватывает входные данные, которые ему соответствуют.

person Bohemian♦    schedule 14.10.2013