我想匹配这样的网址:
输入:
@Component
输出:
x = "https://play.google.com/store/apps/details?id=com.alibaba.aliexpresshd&hl=en"
get_id(x)
在python中使用re进行此操作的最佳方法是什么?
com.alibaba.aliexpresshd
我发现只有一个点的情况。
答案 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本身,它将在第一组中。