Регулярные выражения 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 шт):
Воспользуйтесь методом 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]
Результат не изменится.
Пример регулярки через поиск значения.
Слева через [^/]+ задается последовательность любых символов, кроме /, после \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+')