【问题标题】:How to match the bundle id for android app?如何匹配 Android 应用程序的捆绑包 ID?
【发布时间】:2018-04-03 11:16:47
【问题描述】:

我想像这样匹配网址:

输入:

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

get_id(x)

输出:

com.alibaba.aliexpresshd

在 python 中使用 re 的最佳方法是什么?

def get_id(toParse):
    return re.search('id=(WHAT TO WRITE HERE?)', toParse).groups()[0]

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

【问题讨论】:

    标签: python regex


    【解决方案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= 部分
    @ 987654330@ 是正则表达式的 group(0),它与 ​​URL 的 id 匹配。因此,通过说[0],我们能够返回所需的文本。

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

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

    【讨论】:

      【解决方案2】:

      其实你不需要在里面放什么“特别”的东西。

      由于您知道捆绑包 ID 介于 id=& 之间,因此您可以捕获其中的任何内容并将结果放入捕获组中,如下所示:
      id=(.+)&

      所以代码看起来像这样:

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

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

      查看演示here

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2019-06-10
          • 2017-04-06
          • 1970-01-01
          • 1970-01-01
          • 2011-06-27
          • 2021-12-24
          • 1970-01-01
          • 2014-10-08
          • 2022-09-26
          相关资源
          最近更新 更多