Работая с RSS-потоком поиска Twitter в Yahoo Pipes, я пытаюсь очистить длинные ссылки Twitter и заменить их их сокращенными версиями. Для этого я хочу сопоставить любой текст ссылки, который НЕ находится в домене Twitter. Обычно это ссылки t.co.

Вот пример того, что я хочу сделать:

Повернуть

<a href="http://t.co/AiyTQKaAoU">http://www.denverpost.com/environment/ci_26064841/colorado-coal-mine-mulls-appeal-after-federal-court ...</a>

В

<a href="http://t.co/AiyTQKaAoU">http://t.co/AiyTQKaAoU</a>

Мое регулярное выражение начиналось как <a .*?href=['""](.+?)['""].*?>(.+?)</a>, что соответствует всем ссылкам.

Затем я попытался <a .*?href=['""]!(www\.twitter\.com\/?)['""].*?>(.+?)</a> удалить twitter.com из результатов, но это не сработало. Что я делаю не так?

P.S. Мне не нужно трогать ссылки Twitter, потому что это испортит все ссылки «@» и «#».

Дополнение: Решение @ Avinash-Raj работает в демонстрационной версии, но не в Yahoo Pipe. Кто-нибудь знаком с регулярным выражением в Yahoo Pipes?

1
Bogdan 1 Июл 2014 в 20:12

2 ответа

Лучший ответ

В Yahoo Pipes должно происходить что-то вроде этого:

  • шаблон: href="(http://t.co[^"]*)"[^>]*>http://[^<]*
  • замена: href="$1">$1

Вот демонстрационный канал и вот еще один, на основе вашей трубы.

PS: вы знаете, что можете поместить несколько замен регулярных выражений в один оператор Regex . Так легче читать.

0
janos 10 Июл 2014 в 11:54
Спасибо, @janos! Тем не менее, это не работает в моей конкретной трубе. Не могли бы вы адаптировать его для анализа следующего исходного кода: Rolling Coal: Conservatives ‘screw’ Obama by modifying trucks to spew toxic black smoke <a rel="nofollow" target="_blank" href="http://t.co/BWxgcA8j3h">http://www.rawstory.com/rs/2014/07/07/rolling-coal-conservatives-screw-obama-by-modifying-trucks-to-spew-toxic-black-smoke/&nbsp;…</a>
 – 
Bogdan
7 Июл 2014 в 17:25
Ссылкой на свою трубку не поделитесь? Мне будет проще это клонировать и исправить там
 – 
janos
7 Июл 2014 в 18:38
Канал здесь: -- верхний правый угол. Спасибо!
 – 
Bogdan
7 Июл 2014 в 19:02
Янош, тебе нужно было от меня что-то еще, чтобы закончить это?
 – 
Bogdan
9 Июл 2014 в 20:10
Я обновил шаблон в своем посте и создал демо на основе вашей трубы. Дайте мне знать, если вам все еще нужна помощь.
 – 
janos
10 Июл 2014 в 11:54

Вы можете попробовать следующее регулярное выражение, чтобы захватить значение атрибута href и снова использовать его в заменяющей части для изменения тега <a>. Он должен работать на строках, в которых нет строки twitter.com

^(?:(?!.*twitter\.com.*$))(<a href=\"([^\"]*)\">).*?(<\/a>)

ДЕМО

1
Avinash Raj 1 Июл 2014 в 20:40
Но это повлияет на ВСЕ ссылки, включая те, которые я не хочу изменять... Мне нужно выяснить, как проверить доменное имя и действовать только в том случае, если это НЕ twitter.com. Есть еще идеи?
 – 
Bogdan
1 Июл 2014 в 20:27
Поэтому вам нужно изменить, как указано выше, только если в этой строке нет twitter.com.
 – 
Avinash Raj
1 Июл 2014 в 20:29
Это работает в вашей демонстрации, но не работает в Yahoo Pipe. Можешь помочь и с этим? Вы можете клонировать его отсюда: ссылка -- предложенное вами регулярное выражение находится в верхнем правом узле.
 – 
Bogdan
1 Июл 2014 в 21:07