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,而不搜索匹配中的引用 您的正则表达式使用捕获组:
匹配(并在组1中捕获)http部分(http://| https://)
在第二组中捕获([\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\/\.]*))(?=\")