Добрый день.
Вопрос, конечно избит, но пока не могу найти ответ по моей проблеме.
Необходимо найти url в тексте и записать в список.
Стринга пусть будет такой:
“df dz zfgh dfohg @dflhg (sdfgfg) zdjkfhg@dflhgdfg(dfgdfg) https://twitter.com/430511497475670016 dafg sd g https://twitter.com/us/430511497475d f gd g https://twitter.com/tus/4305”
import re
def get_links(chat_string):
pattern = '(https?:\/\/)?([\w\.]+)\.([a-z]{2,6}\.?)(\/[\w\.]*)*\/?$'
return re.findall(pattern, chat_string)
input_raw = raw_input("Input chat string: ")
links = get_links(input_raw)
print links
Получаю вот такой результат:
[('https://', 'twitter', 'com', '/4305')]
В чем проблема?
http://www.regexr.com/ с упомянутой регуляркой парсинга линки дает нормальную линку, почему у меня кусками находится?
Спасибо.
Я юзаю такую
\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]
1 лайк
polusok
(Mykhailo Poliarush)
#3
Потому что надо убрать символ конца строки в регулярке. А также я убрал группы, чтобы сразу линки получались а не список
import re
def get_links(chat_string):
pattern = '(?:https?:\/\/)?(?:[\w\.]+)\.(?:[a-z]{2,6}\.?)(?:\/[\w\.]*)*\/?'
return re.findall(pattern, chat_string)
input_raw = "df dz zfgh dfohg @dflhg (sdfgfg) zdjkfhg@dflhgdfg(dfgdfg) https://twitter.com/430511497475670016 dafg sd g https://twitter.com/us/430511497475d f gd g https://twitter.com/tus/4305"
links = get_links(input_raw)
print links
и получаю
['https://twitter.com/430511497475670016', 'https://twitter.com/us/430511497475d', 'https://twitter.com/tus/4305']
1 лайк
Значит проблема все таки была в регулярке, вот и верь после этого Хабру. )))
Спаисбо за ответы.
1 лайк
TIT
(Сергей Блохин)
#5
Зачем мучиться с регулярками, если можно взять готовую библиотеку.
На Ruby
URI.extract 'foo http://example.com/ bar http://example.org/ 42'
=> ["http://example.com/", "http://example.org/"]
Уверен, что и на Python есть подобные библиотеки (иначе переходите на Ruby).
1 лайк