如何使用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);
我有一个名为 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);