正则表达式的额外部分网址

时间:2016-03-09 15:31:22

标签: python regex

我正在尝试使用正则表达式提取部分网址。我正在尝试将这两个url类型理想地用于一行和一行。 我正在尝试以下但不确定如何获得第二个网址。我试图从两者中提取4FHP。

>>> import re
>>>
>>> a="/url_redirect/4FHP"
>>> b="/url/4FHP/asdfasdfas/"
>>>
>>> re.search('^\/(url_redirect|url)\/(.*)', a).group(2)
'4FHP'
>>> re.search('^\/(url_redirect|url)\/(.*)', b).group(2)
'4FHP/asdfasdfas/'

2 个答案:

答案 0 :(得分:1)

以下代码将从任一字符串中提取4FHP。注意到我将.*(匹配任何非换行符的序列)更改为[^/]*(匹配任何非/字符的序列)。

re.search('^\/(url_redirect|url)\/([^/]*)', b).group(2)

答案 1 :(得分:0)

您的问题是*运算符是贪婪的,所以它会抓到字符串的末尾,这就是您在第二个示例中获得'4FHP/asdfasdfas/'的原因

当你看到另一个/时,你需要停止匹配,最简单的方法是使用一个明确排除它的字符类,例如[^/]

您还可以使用非捕获群组(?: <regex> )仅返回您感兴趣的匹配群组

re.search('^\/(?:url_redirect|url)\/([^/]*)', b).group(1)