首页 > 解决方案 > 有没有办法匹配以一个字符串开头但*不*以另一个字符串开头的正则表达式?

问题描述

因此,我正在尝试更熟悉 Python 网络抓取,并且我正在尝试仅为特定功能查找外部链接。在我正在阅读的书中,作者通过简单地从字符串中删除“http://”然后查看新链接是否包含新字符串(这是没有前面的“http://”的域名来实现这一点.

我可以看到这段代码是如何失败的,虽然我可以简单地编写一个 if 语句,但它确实让我想知道 - 有没有办法匹配所有以“http”开头但不以“http(s)://domain. com”?我尝试了许多我认为可行的不同正则表达式解决方案,但它们没有。例如,变量“site”包含链接地址。

re.compile("^((?!"+site+").)^http|www*$"))
re.compile("^http|www((?!"+site+").)*$"))

我得到的结果只是所有以 http 或 www 开头的链接,这不是我打算做的。同样,我可以用 if 语句很好地实现它并过滤结果,这不是一个完整的阻止程序,但我很好奇这种可能性的存在

任何帮助,将不胜感激。我环顾网络,但找不到任何与我的用例相匹配的东西。

标签: pythonregexpython-3.x

解决方案


我不建议您使用regex此任务,但我建议您使用urlparsefrom urllib.parsemodule。

这是一个例子:

$> from urllib.parse import urlparse
$> url = urlparse('https://google.com') 
ParseResult(scheme='https', netloc='google.com', path='', params='', query='', fragment='')
$> url.scheme
'https'
$> url.netloc
'google.com'
$> urlparse('https://www.google.com')
ParseResult(scheme='https', netloc='www.google.com', path='', params='', query='', fragment='')

推荐阅读