Python 此正则表达式正在验证URL,但仅此URL验证错误。为什么?

Python 此正则表达式正在验证URL,但仅此URL验证错误。为什么?,python,regex,validation,Python,Regex,Validation,当我查看输出时,由于某种原因,www.fairfaxmedia.co.nz会在结尾处切断z,因此它只显示www.fairfaxmedia.co.n组(2) 我不明白为什么会这样 还有,问题2——我如何只搜索引用中的URL,而不搜索匹配中的引用 您的正则表达式使用捕获组: (http://| https://)匹配(并在组1中捕获)http部分 ([\w]+\.[\w\.]+\/?)在第二组中捕获 ([\w\/\.]+”在第三组中捕获 由于在([\w\/\.]+”中放置了+,字符类[\w\/\

当我查看输出时,由于某种原因,
www.fairfaxmedia.co.nz
会在结尾处切断
z
,因此它只显示
www.fairfaxmedia.co.n
组(2)

我不明白为什么会这样


还有,问题2——我如何只搜索引用中的URL,而不搜索匹配中的引用

您的正则表达式使用捕获组:

  • (http://| https://)
    匹配(并在组1中捕获)http部分
  • ([\w]+\.[\w\.]+\/?)
    在第二组中捕获
  • ([\w\/\.]+”
    在第三组中捕获
由于在
([\w\/\.]+”
中放置了
+
,字符类
[\w\/\.]
不能与任何字符匹配。意思是在
http://www.fairfaxmedia.co.nz“
最后一组必须至少匹配
z”

因此,
z
不能在第二组中(即您正在调用的组),如图所示

如果您想简单地将域名与URL的其余部分分开,您可以调整regex以:

urliter = re.finditer(r'(http://|https://)([\w]+\.[\w\.]+\/?)([\w\/\.]+")',lines)

urlMatches = defaultdict(list)
for match in urliter:
    urlMatches[match.group(2)].append(match.group())

整个URL(不带引号)在捕获组1中,域名在捕获组2中,其余的在捕获组3中:请参见。

要搜索引号中的文本,但将引号保留在匹配项之外,您可以使用环顾断言

例如(核心regexp取自Robins答案)

(?
urliter = re.finditer(r'(http://|https://)([\w]+\.[\w\.]+\/?)([\w\/\.]+")',lines)

urlMatches = defaultdict(list)
for match in urliter:
    urlMatches[match.group(2)].append(match.group())
"(https?://(\w+\.[\w.]+)(/?[\w/.-]*))"
(?<=\")(https?://(\w+\.[\w.]+)(/?[\w\/\.]*))(?=\")