使用正则表达式从URL中提取子字符串

正则表达式新手在这里。 我有一堆网址,我需要从中抽取一些我正在使用正则表达式的子串。

例如:如果我的网址是https://chrome.google.com/webstore/detail/vt-hokie-stone-theme/enmbbbhbkojhbkbolmfgbmlcgpkjjlja?hl=en-US ,我需要提取1. vt-hokie-stone-theme部分和2. enmbbbhbkojhbkbolmfgbmlcgpkjjlja这个url的enmbbbhbkojhbkbolmfgbmlcgpkjjlja部分分成两个独立的变量。

我的URL的最初部分总是保持不变,所以我建立了以下正则表达式detail/([a-z0-9-]+)/([az]+) ,我试图在http:/ /www.pythonregex.com/

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

  • 我希望他们在两个独立的变量中,而不是将它们作为单个变量中的列表格式。 我该怎么做?

  • 另外,在检查pythonregex时, regex.findall(string)命令将输出显示为[(u'vt-hokie-stone-theme', u'enmbbbhbkojhbkbolmfgbmlcgpkjjlja')] 。 我知道前面的u意味着unicode,但我不希望它在我的输出中。 我如何删除它?


  • 您可以使用元组/列表赋值语法来实现这一点:

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


  • 我个人没有看到这个问题,只是从findall()数组的第一个索引设置变量。 但是,如果你确信你的正则表达式总是匹配确切的url字符串,你可以尝试re.match:

    在[22]中:regex = re.compile('a(bc)(cd)')

    在[23]中:regex.match('abccd')。groups()

    Out [23] :('bc','cd')

  • unicode有什么问题? 你为什么不想保留它? 我知道正则表达式只会返回ascii,所以这不是问题。 无论哪种方式,如果使它们成为常规字符串非常重要,只需将其转换为字符串即可。

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


  • 你可以使用下面的正则表达式来实现相同的效果。 如果你确定URL的格式,你可以尝试下面的内容。 请注意,最后一次。*正则表达式捕获组的基础是非贪婪的,捕获组主题的。*正则表达式是非贪婪的。

    >>> 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
    
    链接地址: http://www.djcxy.com/p/87009.html

    上一篇: Extracting substring from URL using regex

    下一篇: Extract a substring using lex regular expressions