#python #python-3.x #list #input #findall
#python #python-3.x #Список #ввод #findall
Вопрос:
Я пытаюсь отфильтровать только ссылки из ввода, который предоставляет пользователь. Однако в настоящее время у меня возникают проблемы с Python findall, поскольку он не возвращает никаких результатов.
В самом регулярном выражении может быть ошибка, поскольку это не является частью моего фактического кода, и я скопировал это в другом сообщении, но я попытался проверить это с моим текущим пониманием регулярных выражений и не увидел очевидной проблемы.
Это примеры ссылок, которые я пытаюсь отфильтровать :
https://ncs.io/symbolism, https://soundcloud.com/nocopyrightsounds/electro-light-symbolism-ncs-release, https://www.youtube.com/watch?v=__CRWE-L45k, https://www.deezer.com/track/93333734?app_id=140685, https://open.spotify.com/album/1BxVIZuG2N1ReBB0T5nVTr?highlight=spotify:track:2zVJlAEB0ublkqJMIn43AE
Чтобы получить результаты, я использую простую функцию, которая должна напрямую возвращать результат :
def get_urls():
# Gets urls from the provided string
urls = input("Stream urls: ")
urls = findall(r'(https?://[^s] )', urls)
return urls
Который я затем правильно вызываю :
if __name__ == '__main__':
print(get_urls())
Я импортирую только findall из re, поскольку это единственная часть, которую я использую :
from re import findall
На самом деле в этом небольшом коде мало что может сломаться, и я сам крайне смущен тем, где я облажался. Если вы видите, что я ошибаюсь, пожалуйста, помогите мне! Спасибо за любую помощь в этом!
Комментарии:
1. У меня отлично работает:
re.findall(r'(https?://[^s] )', 'http://hello https://hithere')
производит['http://hello', 'https://hithere']
. Также обратите внимание,[^s]
это простоS
.2. Я отредактировал сообщение и добавил предположительно не совпадающие ссылки. Не могли бы вы попробовать запустить его по следующим ссылкам? : ncs.io/symbolism , soundcloud.com/nocopyrightsounds /… , youtube.com/watch?v=__CRWE-L45k , deezer.com/track/93333734?app_id=140685 , open.spotify.com/album /…
3. Да, это тоже работает, как и ожидалось (включая запятые).
4. если вы хотите исключить запятую из URL-адресов, тогда регулярное выражение должно быть
urls = findall(r'(https?://[^s,] )', urls)
. Обратите внимание на запятую послеs
5. Является ли ввод примера сильно надуманным? Вы могли бы просто разделить этот ввод на
,
или.
, чтобы получить список URL-адресов.
Ответ №1:
Это работает для меня
from re import findall
def get_urls():
# Gets urls from the provided string
urls = input("Stream urls: ")
urls = findall(r'(https?://[^s,] )', urls)
return urls
if __name__ == '__main__':
print(get_urls())