如何使用python获取等号后的值?

How to grab value after equal sign using python?

我有一个名为 link 的字符串变量,它 returns 来自远程站点的数据。 我如何在等号 (token=) 之后解析数据? 例如我想从中获取“234132421reafdfasdfsdfdsf3234423edfasfdsf” 下一行。

file: "http://www.aaastreams.com/playlist.m3u8?token=234132421reafdfasdfsdfdsf3234423edfasfdsf" 
});

python代码:

req = urllib2.Request('http://www.somesite.com/test.php')
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0')
response = urllib2.urlopen(req)   
link = response.read()

样本响应值来自 "print link;":

.......rest of response
    <script>

    jwplayer("container").setup({
    width:700,
    height:220,
    primary: "hls",
    title:"streams",
    autostart:true,

    image: "./1.jpg",
    file: "http://www.aaastreams.com/playlist.m3u8?token=234132421reafdfasdfsdfdsf3234423edfasfdsf" 
    });

    jwplayer().onError(function(){
    jwplayer().load({file:"http://www.aaa.com/jwplayer/ads.mp4",image:"http://aaa.com/2.png"});
    jwplayer().play();
    });

    </script>
.......rest of response

您可以将正则表达式与捕获组一起使用。

可以找到对此的完整解释 here 向下滚动到标有 "Groups"

的部分

“组由'(', ')'元字符标记。'('和')'与它们在数学表达式中的含义大致相同;它们将包含在其中的表达式组合在一起,您可以使用重复限定符重复组的内容,例如 、+、? 或 {m,n}。例如,(ab) 将匹配 ab 的零次或多次重复.

>>> p = re.compile('(a(b)c)d')
>>> m = p.match('abcd')
>>> m.group(0)
'abcd'
>>> m.group(1)
'abc'
>>> m.group(2)
'b'

所以在这种情况下,您可以使用如下正则表达式:

'^ *[a-z][A-Z] *\=(.*)$

第 0 组是整个匹配组 1 和向前匹配可以出现在多个括号(组匹配)对中的表达式部分。这些组可以嵌套。

请注意,这是一种通用方法,并非特定于 URL

与其进一步解析 url 并假设整个字符串中只有一个等号,我建议像这样进行一些字符串操作:

In [1]: s = "http://www.aaastreams.com/playlist.m3u8?token=234132421reafdfasdfsdfdsf3234423edfasfdsf"
In [2]: s.split('=')[1]
Out[3]: '234132421reafdfasdfsdfdsf3234423edfasfdsf'

考虑内置的字符串方法:

str.partition(sep)

在第一次出现 sep 时拆分字符串,return 包含分隔符之前的部分、分隔符本身和分隔符之后的部分的三元组。如果未找到分隔符,return 包含字符串本身的 3 元组,后跟两个空字符串。

在您的情况下,您可以使用“=”作为分隔符 (sep)。 str 是带“=”的长字符串。

解析 URL 的更好方法是使用 urlparse 模块。

这是一个例子:

from urlparse import urlparse, parse_qs

url = "http://www.aaastreams.com/playlist.m3u8?token=234132421reafdfasdfsdfdsf3234423edfasfdsf"
query = urlparse(url).query
params = parse_qs(query)

params 将保存一个包含您的令牌的字典,以及 url.

中的任何其他查询参数

在尝试不同的解决方案后,我想到了解决这个问题的最简单方法:

  tokenValue = re.search('token=(.*)"', link)
  print tokenValue.group(1);