使用regex从URL中提取子字符串

2024-05-21 16:02:25 发布

您现在位置:Python中文网/ 问答频道 /正文

Regex新手。我有一堆url,我需要从中提取一些子字符串,我正在使用正则表达式。在

如果我的URL是https://chrome.google.com/webstore/detail/vt-hokie-stone-theme/enmbbbhbkojhbkbolmfgbmlcgpkjjlja?hl=en-US,我需要提取1。vt-hokie-stone-theme第二部分。enmbbbhbkojhbkbolmfgbmlcgpkjjlja将此url中的部分分为两个独立的变量。在

我的URL的初始部分始终保持不变,因此我构建了以下正则表达式detail\/([a-z0-9\-]+)\/([a-z]+),并尝试在{a1}上执行

我知道regex.findall(string)给了我想要的,但我有以下问题:

  1. 我希望它们在两个独立的变量中,而不是在一个变量中使用列表格式。我该怎么做?

  2. 另外,在检查pythonregex时,regex.findall(string)命令将输出作为[(u'vt-hokie-stone-theme', u'enmbbbhbkojhbkbolmfgbmlcgpkjjlja')]。{cd8>我不想知道前面的输出。如何删除它?


Tags: 字符串httpsurlstringthemeregexdetail新手
3条回答
  1. 可以使用tuple/list赋值语法来实现:

    try:
        var1, var2 = re.search(r"detail\/([a-z0-9\-]+)\/([a-z]+)", my_url).groups()
    except AttributeError:
        var1 = var2 = ""
    
  2. unicode字符串只在网站的答案中显示,而在原始python中,返回值将是普通字符串。所以,你不用担心。

  1. 我个人认为仅仅从findall()数组的第一个索引中设置变量是没有问题的。但是,如果您确信您的regex总是与url字符串完全匹配,那么您可以尝试一下重新匹配公司名称:

    在[22]:正则表达式=重新编译('a(bc)(cd)')

    在[23]:正则表达式匹配('abccd')。组()

    输出[23]:('bc','cd')

  2. unicode有什么问题?你为什么不想留着呢?我知道regex无论如何只返回ascii,所以这不是问题。不管怎样,如果让它们成为常规字符串非常重要,只需将其转换为字符串即可。在

    str(u'abc')=='abc'

您可以使用下面的正则表达式来实现相同的效果。如果你确定了网址的格式,你可以试试下面的方法。请注意,最后一个捕获th groupsbase的正则表达式是非贪婪的,而捕获组主题的正则表达式是非贪婪的。在

>>> var = 'https://chrome.google.com/webstore/detail/vt-hokie-stone-theme/enmbbbhbkojhbkbolmfgbmlcgpkjjlja?hl=en-U'

>>> match = re.match(r"(?P<base>.*/webstore/.*?/)(?P<theme>.*?)/(?P<tail>.*)",var);
>>> if match:
       ...    print match.group('base')
       ...    print match.group('theme')
       ...    print match.group('tail')

https://chrome.google.com/webstore/detail/
vt-hokie-stone-theme
enmbbbhbkojhbkbolmfgbmlcgpkjjlja?hl=en-U

相关问题 更多 >