2011-01-12 19 views
1

我有一個輸入文本它可以是:醒目可選部分的正則表達式

"URL: http://www.cnn.com Cookie: xxx; yyy" 

或者只是:

"URL: http://www.cnn.com" 

如何同時捕獲URL和餅乾到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 
+0

謝謝,我不知道可以被嵌套。 – jackhab 2011-01-12 12:05:18

0

括在可選部分(餅乾:XXX,YYY「)?

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

只需使用單獨的捕捉組,並?爲您正則表達式的可選部分。如果捕獲組不捕捉任何東西。該集團的價值將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()