Python findall не возвращает результаты даже при предполагаемом правильном совпадении

#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())