我正在尝试使用正则表达式提取部分网址。我正在尝试将这两个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/'
答案 0 :(得分:1)
以下代码将从任一字符串中提取4FHP
。注意到我将.*
(匹配任何非换行符的序列)更改为[^/]*
(匹配任何非/字符的序列)。
re.search('^\/(url_redirect|url)\/([^/]*)', b).group(2)
答案 1 :(得分:0)
您的问题是*
运算符是贪婪的,所以它会抓到字符串的末尾,这就是您在第二个示例中获得'4FHP/asdfasdfas/'
的原因
当你看到另一个/
时,你需要停止匹配,最简单的方法是使用一个明确排除它的字符类,例如[^/]
您还可以使用非捕获群组(?: <regex> )
仅返回您感兴趣的匹配群组
re.search('^\/(?:url_redirect|url)\/([^/]*)', b).group(1)