簡體   English   中英

使用正則表達式和python解析網址時的語法或語法

[英]Or syntax when parsing urls with regex & python

在這里掙扎一些正則表達式。 我將遍歷幾個URL,但我無法獲得正則表達式以了解如何識別收入或成本並同時獲取它們。 本質上,輸出看起來像這樣:

import re

url = ['GET /ca.gif?rb=1631&ca=20564929&ra=%n&pid=&revenue=224.00&cost=',
       'GET /ca.gif?rb=1631&ca=20564929&ra=%n&pid=&revenue=224.00',
       'GET /ca.gif?rb=1631&ca=20564929&ra=%n&pid=&revenue=224.00&cost=13']
values = []
for i in urls:
    values.append(re.search(r'(?<=revenue=)(.*?)(?=&|;)',url).group(0))

print values

[[224.00, ''],
 '224.00',
 [224.00, 13]]

您需要使用re.findall因為re.search僅返回第一個匹配項。

>>> for i in url:
        values.append(re.findall(r'(?:\brevenue=|\bcost=)(.*?)(?:[&;]|$)', i))


>>> values
[['224.00', ''], ['224.00'], ['224.00', '13']]

使用urlparse.urlparse解析URL,並urlparse.parse_qs解析查詢字符串。

from urlparse import urlparse, parse_qs

reqs = ['GET /ca.gif?rb=1631&ca=20564929&ra=%n&pid=&revenue=224.00&cost=',
        'GET /ca.gif?rb=1631&ca=20564929&ra=%n&pid=&revenue=224.00',
        'GET /ca.gif?rb=1631&ca=20564929&ra=%n&pid=&revenue=224.00&cost=13']

urls = [re.split(' +', s, 1)[1] for s in reqs]

kv = [parse_qs(urlparse(url).query) for url in urls]

values = [(e.get('revenue'), e.get('cost')) for e in kv]
# values = [{'revenue': e.get('revenue'), 'cost': e.get('cost')} for e in kv]

示例輸出( parse_qs提供每個鍵的值列表,因為查詢可能包含重復的鍵):

[(['224.00'], None), (['224.00'], None), (['224.00'], ['13'])]

values行不是必需的。 您可以直接使用kv dict。

如果您必須處理無效輸入,則必須將包含urlskv的列表理解重寫為循環:

  • 對於urls ,您需要檢查並過濾掉沒有HTTP方法的條目
  • 對於kv ,您需要為urlparse添加urlparse以捕獲無效的語法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM