正规新手在这里。我有一堆URL,我需要从中提取一些我正在使用正则表达式的子串。
例如:如果我的网址为https://chrome.google.com/webstore/detail/vt-hokie-stone-theme/enmbbbhbkojhbkbolmfgbmlcgpkjjlja?hl=en-US
,我需要将此网址中的1. vt-hokie-stone-theme
部分和2. enmbbbhbkojhbkbolmfgbmlcgpkjjlja
部分提取为两个单独的变量。
我的网址的初始部分始终保持不变,因此我构建了以下正则表达式detail\/([a-z0-9\-]+)\/([a-z]+)
,我正试图在http://www.pythonregex.com/
我看到regex.findall(string)
给了我想要的东西,但我有以下问题:
我希望它们在两个单独的变量中,而不是在单个变量中将它们作为列表格式。我该怎么办?
此外,在检查pythonregex时,regex.findall(string)
命令将输出显示为[(u'vt-hokie-stone-theme', u'enmbbbhbkojhbkbolmfgbmlcgpkjjlja')]
。我知道前面的u
表示unicode,但我不想在输出中使用它。如何删除它?
答案 0 :(得分:3)
您可以使用元组/列表赋值语法来实现此目的:
try:
var1, var2 = re.search(r"detail\/([a-z0-9\-]+)\/([a-z]+)", my_url).groups()
except AttributeError:
var1 = var2 = ""
unicode字符串只能在网站的答案中看到,而在原始python中,返回值将是普通字符串。所以,你不必担心它。
答案 1 :(得分:0)
我个人没有看到只是从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'
答案 2 :(得分:0)
您可以使用以下正则表达式来实现相同的目标。如果您确定URL的格式,可以尝试以下内容。请注意,最后一个。*正则表达式捕获组 base 是非贪婪的。*正则表达式捕获组主题是非贪婪的。
>>> 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