URL 的字符串拆分总是改变它在 python 中的值的位置

String Splitting of an URL which always changes the position of it's values in python

我需要拆分一个经常改变其值位置的 url。

例如:- 这是请求令牌

三个不同位置的url
01:-https://127.0.0.1/?action=login&type=login&status=success&request_token=oCS44HJQT2ZSCGb39H76CjgXb0s2klwA

02:-https://127.0.0.1/?request_token=43CbEWSxdqztXNRpb2zmypCr081eF92d&action=login&type=login&status=success

03:-https://127.0.0.1/?&action=login&request_token=43CbEWSxdqztXNRpb2zmypCr081eF92d&type=login&status=success

从这些 url 我只需要'='后面的请求令牌的值,带有像这样的字母数字'43CbEWSxdqztXNRpb2zmypCr081eF92d'。

为了拆分这个 url 我正在使用这个代码

request_token = driver.current_url.split('=')[1].split('&action')[0]

但是当 url 不在指定位置时它会给我错误。

那么谁能给我一个解决这个 url 在 python 中只拆分成一行的解决方案,这将是我的堆栈成员对我的极大祝福。

Note:- Here i'm using driver.current_url because i'm working in selenium to do the thing.

您可以使用 urllib.parse 模块正确解析 URL。

>>> from urllib.parse import urlparse, parse_qs
>>> url = "?request_token=43CbEWSxdqztXNRpb2zmypCr081eF92d&action=login&type=login&status=success"
>>> query = parse_qs(urlparse(url).query)
>>> query['request_token']
['43CbEWSxdqztXNRpb2zmypCr081eF92d']
>>> query['request_token'][0]
'43CbEWSxdqztXNRpb2zmypCr081eF92d'

这处理 URL 的实际结构,不依赖于参数的位置或您必须在正则表达式中处理的其他特殊情况。

假设您将 URL 作为字符串,那么您可以使用正则表达式来隔离请求令牌。

import re
urls = ['https://127.0.0.1/?action=login&type=login&status=success&request_token=oCS44HJQT2ZSCGb39H76CjgXb0s2klwA',
        'https://127.0.0.1/?request_token=43CbEWSxdqztXNRpb2zmypCr081eF92d&action=login&type=login&status=success',
        'https://127.0.0.1/?&action=login&request_token=43CbEWSxdqztXNRpb2zmypCr081eF92d&type=login&status=success']
for url in urls:
    m = re.match('.*request_token=(.*?)(?:&|$)', url)
    if m:
        print(m.group(1))