Regex за премахване на определен брой символи след съвпадение

Търся прост регулярен израз за това,

Това е входът:

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
Просто исках да заменя съдържанието, използвайки notepad++   -  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

Ако проявявате интерес, предоставих изходния код в публикацията си - pastebin.com/znW5jYY9 Много малко вероятно е бенчмаркът изобщо претовари компютъра ми. Също така се уверих, че имам доста оптимизиран код. Разборът на множество низове наистина е по-бърз от голям.
person Fabian    schedule 14.10.2013

Този регулярен израз съвпада с 8-те знака непосредствено преди текста ".jpg":

.{8}(?=\.jpg)

Ако не сте сигурни колко знака има, това съответства на произволен брой знаци от и включително последното тире преди ".jpg":

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

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

Странно изглеждащият израз (?=...) е "поглед напред", който съответства на регулярния израз в него, но не консумира или улавя входа, който съответства.

person Bohemian♦    schedule 14.10.2013