如何匹配Android应用程序的包ID?

时间:2018-04-03 11:16:48

标签: python regex

我想匹配这样的网址:

输入:

@Component

输出:

x = "https://play.google.com/store/apps/details?id=com.alibaba.aliexpresshd&hl=en"

get_id(x)

在python中使用re进行此操作的最佳方法是什么?

com.alibaba.aliexpresshd

我发现只有一个点的情况。

3 个答案:

答案 0 :(得分:1)

你可以尝试:

r'\?id=([a-zA-Z\.]+)'

对于你的正则表达式,如下:

def get_id(toParse)
    regex = r'\?id=([a-zA-Z\.]+)'
    x = re.findall(regex, toParse)[0]
    return x

正则表达式 -

通过在实际的正则表达式代码之前添加r,我们指定它是一个原始字符串,因此我们不必在每个命令之前添加多个反斜杠,即 better explained here < /强>

?对正则表达式系统具有特殊含义,因此为了匹配问号,我们在其前面加上\?之类的反斜杠。 id=与提取的id=部分相匹配 ([a-zA-Z\.]+)是正则表达式的组(0),它与URL的id匹配。因此,通过说[0],我们可以返回所需的文本。

注意 - 我已使用re.findall,因为它返回一个数组[],其索引为0的元素是提取的文本。

我建议您查看 rexegg.com 以获取正则表达式语法的完整列表。

答案 1 :(得分:-1)

实际上,你不需要在那里添加任何“特殊”的东西。

由于您知道包ID在id=&之间,因此您可以捕获内部的任何内容,并将结果保存在捕获组中,如下所示:
id=(.+)&

所以代码看起来像这样:

def get_id(toParse):
    return re.search('id=(.+)&', toParse).groups()[0]

注意:您可能需要将组索引更改为“1”,而不是“0”,因为大多数正则表达式引擎会将其保留为完全匹配。我不熟悉Python实际上如何处理这个问题。

请参阅演示here

答案 2 :(得分:-1)

这个正则表达式应该很容易得到你想要的东西,它会在id=和以下参数(.*?不合适)或字符串结尾之间得到所有内容。

id=(.*?)(&|$)

如果您只需要id本身,它将在第一组中。