python - 有没有办法匹配以一个字符串开头但*不*以另一个字符串开头的正则表达式?
问题描述
因此,我正在尝试更熟悉 Python 网络抓取,并且我正在尝试仅为特定功能查找外部链接。在我正在阅读的书中,作者通过简单地从字符串中删除“http://”然后查看新链接是否包含新字符串(这是没有前面的“http://”的域名来实现这一点.
我可以看到这段代码是如何失败的,虽然我可以简单地编写一个 if 语句,但它确实让我想知道 - 有没有办法匹配所有以“http”开头但不以“http(s)://domain. com”?我尝试了许多我认为可行的不同正则表达式解决方案,但它们没有。例如,变量“site”包含链接地址。
re.compile("^((?!"+site+").)^http|www*$"))
re.compile("^http|www((?!"+site+").)*$"))
我得到的结果只是所有以 http 或 www 开头的链接,这不是我打算做的。同样,我可以用 if 语句很好地实现它并过滤结果,这不是一个完整的阻止程序,但我很好奇这种可能性的存在
任何帮助,将不胜感激。我环顾网络,但找不到任何与我的用例相匹配的东西。
解决方案
我不建议您使用regex
此任务,但我建议您使用urlparse
from urllib.parse
module。
这是一个例子:
$> 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='')
推荐阅读
- python - 大熊猫中的地图数据
- reactjs - react-d3-tree 无法将节点形状设置为本地 png
- cassandra - 有没有办法使用 cassandra 压力插入 csv 文件数据?
- angular - setActive ngClass 角度
- intellij-idea - IntelliJ 2020.1 中的问题构建项目
- c# - SQL Linq:获取嵌套 DB 类的单个实例
- typo3 - TYPO3 10.3 中前端的用户名
- c# - 我不断收到此错误,但无法修复:错误 CS0161: 'Program.MathMinWhole(int, int)': 并非所有代码路径都返回值
- python-3.x - python处理文本文件中的特定部分
- scala - 什么是更好的?foreach 和更新地图与使用 list.map