使用正则表达式从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