#python #regex
#python #регулярное выражение
Вопрос:
У меня есть входной текст, который может быть либо:
"URL: http://www.cnn.com Cookie: xxx; yyy"
или просто:
"URL: http://www.cnn.com"
Как мне преобразовать URL-адрес и cookie-файл в две отдельные переменные в Python? Часть, которую я не знаю, как указать, является необязательным файлом cookie.
Спасибо.
Ответ №1:
str = 'URL: http://www.cnn.com Cookie: xxx; yyy'
match = re.search(r'URL: (S )( Cookie: (.*))?', str)
print match.group(1)
print match.group(3)
>>> http://www.cnn.com
>>> xxx; yyy
Комментарии:
1. Спасибо, я не знал, что группы могут быть вложенными.
Ответ №2:
import re
inputstring = "URL: http://www.cnn.com Cookie: xxx; yyy"
if 'Cookie' in inputstring:
m = re.match('URL: (.*?) Cookie: (.*)', inputstring)
if m:
url = m.group(1)
cookie = m.group(2)
print url
print cookie
else:
m = re.match('URL: (.*)', inputstring)
if m:
url = m.group(0)
print url
Ответ №3:
Просто используйте отдельные группы захвата и ?
для необязательной части вашего регулярного выражения. Если группа захвата ничего не захватывает, значение группы будет None
.
>>> regex = re.compile(r'URL: (S )(?:s Cookie: (S ))?')
>>> regex.match("URL: http://www.cnn.com Cookie: xxx;yyy").groups()
('http://www.cnn.com', 'xxx;yyy')
>>> regex.match("URL: http://www.cnn.com").groups()
('http://www.cnn.com', None)
Я только что использовал S
для приведенных выше шаблонов URL и cookie для целей примера. Замените их вашим реальным URL и шаблонами cookie.
Вместо groups()
вы можете использовать group(1)
и group(2)
— поведение такое же, но groups()
удобно при распаковке. например:
url, cookie = match.groups()
Ответ №4:
Вложить необязательную часть в (Cookie: xxx; гггг»)?