2013-10-25 3 views
1

Мне нужно удалить из этого: http://example.com/media/catalog/product/cache/1/thumbnail/56x/9df78eab33525d08d6e5fb8d27136e95/i/m/images_3.jpg все между товаром/и/i и сохранить http://example.com/media/catalog/product/i/m/images_3.jpg с помощью регулярного выражения или C#. Это параметры в приложении для искателя. Пожалуйста, помогите.regex удалить динамическую строку и сохранить остальные

+1

Будет 'я/m/'постоянна? Может ли это измениться? И вы пробовали какой-либо код до сих пор? Если да, отправьте код тоже. – unlimit

+0

Да, это будет всегда как i/m – geryjuhasz

ответ

1
var input = "http://example.com/media/catalog/product/cache/1/thumbnail/56x/9df78eab33525d08d6e5fb8d27136e95/i/m/images_3.jpg"; 
var re = new Regex("^(.+/product)/.+(/i/.+)$"); 
var m = re.Match(input); 
if (!m.Success) throw new Exception("does not match"); 
var result = m.Groups[1].Value + m.Groups[2].Value; 
//result = "http://example.com/media/catalog/product/i/m/images_3.jpg" 
+1

Я проверю ваш за несколько минут – geryjuhasz

+1

Это тоже хорошо работает. Благодарю. – geryjuhasz

+0

И это единственный ответ, который отвечает на ваш вопрос так, как он был указан (используйте регулярное выражение и получите строку до «/ i») без предполагаемой определенной длины (которая не указана в вашем вопросе) – JoelFan

0
string str = "http://example.com/media/catalog/product/cache/1/thumbnail/56x/9df78eab33525d08d6e5fb8d27136e95/i/m/images_3.jpg"; 
int prodIndex = str.IndexOf("/product/"); 
int iIndex = str.IndexOf("/i/"); 
string newStr = str.Substring(0, prodIndex + "/product/".Length) 
       + str.Substring(iIndex + 1); 

Вот более общий пример использования регулярных выражений, что просто ищет часть после хэш 32 символов, вместо того, предполагая, что он будет /i/:

string str = "http://example.com/media/catalog/product/cache/1/thumbnail/56x/9df78eab33525d08d6e5fb8d27136e95/i/m/images_3.jpg"; 
var match = Regex.Match(str, @"(.*/product/).*/.{32}/(.*)"); 
var newStr = match.Groups[1].Value + match.Groups[2].Value; 
+0

Я думаю, что первый из них будет более общим, потому что я не знаю, будет ли хэш всегда содержать это nr символов. Я попробую ваш подход. спасибо – geryjuhasz

+0

отлично, спасибо! – geryjuhasz

+0

-1, потому что во втором разделе кода вы строго кодируете определенную длину вместо поиска символов «/ i», как заданный вопрос. Раздел 1-го кода не имеет жестко закодированной длины, но не использует регулярное выражение, как указано в quesiton. – JoelFan

Смежные вопросы