我有一个输入文本,可以是:
"URL: http://www.cnn.com Cookie: xxx; yyy"
或只是:
"URL: http://www.cnn.com"
如何在Python中将URL和cookie捕获到两个单独的变量中?我不知道如何指定的部分是可选的cookie。
感谢。
答案 0 :(得分:1)
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
答案 1 :(得分:1)
只需使用单独的捕获组,并使用?
作为正则表达式的可选部分。如果捕获组未捕获任何内容,则组的值将为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()
答案 2 :(得分: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
答案 3 :(得分:0)
将可选部分包含在(Cookie:xxx; yyy“)中?