2015-09-08 4 views
2

Я пытаюсь извлечь URL-адреса из документа XML, которые находятся в атрибуте элемента url, и содержать строку "s144".URL-адрес совпадения, содержащий определенное слово

Я пытаюсь сделать это в NoteTab Light и попытался выяснить, как писать регулярные выражения, но просто не может обернуться вокруг него. Я не программист, поэтому вы можете себе представить, что я потерян.

Файл XML является Google Picasaweb альбом RSS Feed: https://picasaweb.google.com/data/feed/base/user/100688803282112893010/albumid/6140734189321131313?alt=rss&kind=photo&hl=en_US

Вот что у меня есть:

(?s)url\s*?=\s*?'(.*?)' 

Он соответствует URL, в атрибуте url, но мне нужно, чтобы сократить его до содержащие "s144".

В конечном итоге я пытаюсь взять список URL-адресов и переписать их в миниатюры изображений, связанные с полным изображением.

<a href="https://lh3.googleusercontent.com/-5veHcnzHMRE/VTmFk66WJoI/AAAAAAAAIBs/kCUSSxylUAo/s1920-Ic42/35%252520Docked%252520with%252520210BR.jpg"> 
<img src="https://lh3.googleusercontent.com/-5veHcnzHMRE/VTmFk66WJoI/AAAAAAAAIBs/kCUSSxylUAo/s144-Ic42/35%252520Docked%252520with%252520210BR.jpg" /> 
</a> 

Как я могу сузить матчи только URL-адреса, которые содержат "s144"?

+0

возможно дубликат http://stackoverflow.com/questions/29074740/how-to-extract-urls-from-a-xml-file – pcantalupo

+0

Обратите внимание, что [NoteTab Сообщается, что Light использует регулярные выражения, совместимые с Perl] (https://en.wikipedia.org/wiki/NoteTab#NoteTab_regular_expressions). – J0e3gan

ответ

0

следующая кажется, работает хорошо против the XML file you provided:

url\s*=\s*'(\S*?s144\S*?)' 

Regular expression visualization

Debuggex Demo

+0

Демоверсия Debuggex хорошо работала против всего XML-файла, предоставленного OP, но я не смог сохранить его со всем XML-файлом: поэтому я сохранил его примерно с половиной элементов элемента «элемент» XML-файла, что наглядно демонстрирует поведение регулярных выражений.Чтобы запустить демонстрацию против всего XML-файла, просто вставьте его содержимое в соответствующую текстовую область на странице демо. – J0e3gan

+1

Спасибо J0e, это имеет большой смысл. Я попытался понять это примерно в течение 3 часов самостоятельно и никуда не пропал. Я ценю, что вы нашли время ответить мне на это. –

0

Как об этом:

(?s)url\s*?=\s*?'([^']*?s144[^']*?)' 
+0

Спасибо. Это отлично работает. –

0

Попробуйте это:

(?s)url\s*?=\s*?'(.*?/(s\d+-).*?)' 

Объяснение .*?/(s\d+-).*? части:

  • .*? - выглядит, как вы уже знаете, что это.
  • /() - некоторая часть URL, который начинается с обратной косой черты
  • s - ... а затем s символ (означает size, я думаю ...)
  • \d+ - следует, по меньшей мере, один разряд
  • - - с последующим minus характера
+0

Спасибо. Это похоже на слишком много, но ваше объяснение, безусловно, полезно. –

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