Регулярные выражения python3

Дана строка

msg = 'name / https://stackoverflow.com | name2 + https://stackoverflow.com2 | name3 + https://stackoverflow.com3\nname4 * https://stackoverflow.com4 | name5 - https://stackoverflow.com5'

Как поделить строку на символе "/", то есть, чтобы две новых переменных приняли следующие значения:

title = 'name'
link = 'https://stackoverflow.com'

Ответы (2 шт):

Автор решения: V-Mor

Воспользуйтесь методом split:

title, link = msg.split(' / ', maxsplit=1)

Метод разбивает строку, из объекта которой вызван на отрезки, разделённые символом, переданным ему в аргумент, причём кол-во анализируемых разделителей можно задать с помощью доп. аргумента maxsplit, и возвращает результат в виде списка таких отрезков. Python позволяет сразу положить элементы списка в нужные переменные, что я и сделал в своём примере.

Если подробнее, то msg.split('/') вернёт ['dwdawd', 'https://stackoverflow.com'], а присваивание "положит" по соответствию нулевой элемент списка в переменную title, первый элемент списка – в переменную link. Можно расписать мой пример длиннее:

result = msg.split(' / ', maxsplit=1)
title = result[0]
link = result[1]

Результат не изменится.

→ Ссылка
Автор решения: gil9red

Пример регулярки через поиск значения.

Слева через [^/]+ задается последовательность любых символов, кроме /, после \s* говорит, что пробелы могут быть от 0 до n и http.+ для поиска ссылки начинающейся с http

Пример:

import re

msg = 'dwdawd / https://stackoverflow.com'
items = re.findall(r'([^/]+)\s*/\s*(http.+)', msg)
if items:
    title, url = items[0]
    print(title, url)
    # dwdawd https://stackoverflow.com

Немного "докрученный" пример:

import re

def parse(msg: str) -> tuple:
    items = re.findall(r'([^/]+)\s*/\s*(http.+)', msg)
    if items:
        title, url = map(str.strip, items[0])
        return title, url
    return '', ''


msg = 'dwdawd / https://stackoverflow.com'
print(parse(msg))
# ('dwdawd', 'https://stackoverflow.com')

msg = 'dwdawd/https://stackoverflow.com'
print(parse(msg))
# ('dwdawd', 'https://stackoverflow.com')

msg = 'dwdawd   / https://stackoverflow.com'
print(parse(msg))
# ('dwdawd', 'https://stackoverflow.com')

msg = '/ https://stackoverflow.com'
print(parse(msg))
# ('', '')

msg = 'dwdawd   /https://stackoverflow.com/http+'
print(parse(msg))
# ('dwdawd', 'https://stackoverflow.com/http+')
→ Ссылка