Извлечение строки, начинающейся с x и заканчивающейся y - PullRequest
3 голосов
/ 29 марта 2010

Прежде всего, я выполнил поиск по этому вопросу и смог найти способ использовать что-то вроде String.Split () для извлечения строки на основе условия. Однако я не смог найти, как извлечь его из условия завершения. Например, у меня есть файл со ссылками на изображения: http://i594.photobucket.com/albums/tt27/34/444.jpghttp://i594.photobucket.com/albums/as/asfd/ghjk6.jpg Вы заметите, что все изображения начинаются с http:// и заканчиваются .jpg. Тем не менее, .jpg заменяется http: // без пробела, что делает это немного сложнее.

Итак, в основном я пытаюсь найти способ (Regex?) Извлечь строку из строки, которая начинается с http: // и заканчивается .jpg

Ответы [ 5 ]

4 голосов
/ 29 марта 2010

Regex - самый простой способ сделать это. Если вы не знакомы с регулярными выражениями, вы можете проверить Regex Buddy . Это относительно дешевый маленький инструмент, который я нашел чрезвычайно полезным, когда учился. Для вашего конкретного случая возможное выражение:

(http://.+?\.jpg)

Вероятно, это требует некоторой доработки, так как существуют граничные случаи, которые могут сработать, но это будет работать, если файл представляет собой простой список.


Вы также можете сделать бесплатное быстрое тестирование выражений здесь .


Согласно вашему последнему комментарию, если у вас есть ссылки и на другие не-изображения, вам нужно убедиться, что он не начинается с http: // для одной ссылки, а читать до .jpg для следующее изображение. Поскольку URL не могут иметь пробелов, вы можете сделать это следующим образом:

(http://[^\s]+\.jpg)

Это в основном говорит: «соответствует строка, начинающаяся с http: // и заканчивающаяся .jpg, где между двумя есть хотя бы один символ, и ни один из этих символов не является пробелом».

2 голосов
/ 29 марта 2010
    Regex RegexObj = new Regex("http://.+?\\.jpg");
Match MatchResults = RegexObj.Match(subject);
while (MatchResults.Success) {
    //Do something with it 
    MatchResults = MatchResults.NextMatch();
     }
1 голос
/ 29 марта 2010

Следующий LINQ будет разделен на http: и убедитесь, что вы получаете только значения, оканчивающиеся на jpg.

 var images = from i in imageList.Split(new[] {"http:"}, 
                                     StringSplitOptions.RemoveEmptyEntries)
              where i.EndsWith(".jpg")
              select "http:" + i;
1 голос
/ 29 марта 2010

В вашем конкретном случае вы всегда можете разделить, если ".jpg". Вы, вероятно, в конечном итоге получите один пустой элемент в конце массива, и вам придется добавлять .jpg в конце каждого файла, если вам это нужно. Кроме того, я думаю, что это будет работать.

Протестировал следующий код, и он работал нормально:

public void SplitTest()
{
    string test = "http://i594.photobucket.com/albums/tt27/34/444.jpghttp://i594.photobucket.com/albums/as/asfd/ghjk6.jpg";
    string[] items = test.Split(new string[] { ".jpg" }, StringSplitOptions.RemoveEmptyEntries);
}

Это даже избавиться от пустой записи ...

0 голосов
/ 29 марта 2010

Regex будет очень хорошо работать для этого. Вот пример в C # (и Java) для Regex

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...