Изменение регулярного выражения Python

Я пытаюсь найти все ссылки на веб-странице в виде "http://something" или https://something. Я сделал регулярное выражение, и он работает:

 L = re.findall(r"http://[^/\"]+/|https://[^/\"]+/", site_str) 

Но есть ли более короткий способ написать это? Я повторяю: // [^ / \ "] + / дважды, возможно, без всякой необходимости. Я пробовал разные вещи, но это не работает. Я пробовал:

 L = re.findall(r"http|https(://[^/\"]+/)", site_str) L = re.findall(r"(http|https)://[^/\"]+/", site_str) L = re.findall(r"(http|https)(://[^/\"]+/)", site_str) 

Очевидно, что я что-то пропустил, или я просто недостаточно понимаю регулярные выражения python.

One Solution collect form web for “Изменение регулярного выражения Python”

Вы используете группы захвата, а .findall() изменяет поведение, когда вы их используете (оно будет возвращать только содержимое групп захвата). Ваше регулярное выражение может быть упрощено, но ваши версии будут работать, если вместо этого вы будете использовать не- захватные группы:

 L = re.findall(r"(?:http|https)://[^/\"]+/", site_str) 

Вам не нужно избегать двойной цитаты, если вы используете одиночные кавычки вокруг выражения, и вам нужно только изменить s в выражении, так что s? тоже будет работать:

 L = re.findall(r'https?://[^/"]+/', site_str) 

Демо-версия:

 >>> import re >>> example = ''' ... "http://someserver.com/" ... "https://anotherserver.com/with/path" ... ''' >>> re.findall(r'https?://[^/"]+/', example) ['http://someserver.com/', 'https://anotherserver.com/'] 
  • Вопрос Python re.sub
  • Различное поведение между re.finditer и re.findall
  • Модуль Python re становится в 20 раз медленнее при циклировании более чем 100 различных регулярных выражений
  • заменяя только отдельные экземпляры символа регулярным выражением python
  • Регулярное выражение для группы захвата один или несколько раз
  • регулярное выражение для тройной цитаты
  • Регулярное выражение Python: сопоставление скобок в скобках
  • Регулятор Python не работает
  • Регулярное выражение для диапазона адресов IPv4
  • Использование RegEx для соответствия IP-адресам в Python
  • Регулярное выражение Python для поиска слов в предложении
  • Python - лучший язык программирования в мире.