Return 在 Python 中使用正则表达式时只有一个字符串

Return just ONE string while using Regular Expressions in Python

我正在开发一个简单的程序,它可以从给定的网站中提取链接并将它们放入列表中。之后,"todo"-列表中提取的 URL 将以相同的方式逐步分析。

主程序正在运行,但在下一个版本中,我只想提取主要页面并忽略底部(例如 "www.whosebug.com" 但不是 "www.whosebug.com/questions/ask")

我尝试使用 re.findall 函数,但由于它是一个 list 对象,它破坏了我的可迭代待办事项列表的结构。

是否可以在使用正则表达式时仅 return 一个字符串?

soup = BeautifulSoup(handle, 'html.parser')
newlinks = soup.find_all('a')

for link in newlinks:
    todo.append( re.findall('(http://.+)/', link.get('href')) )

如果您只想为每个输入字符串匹配一个,请不要使用 findall,后者的目的是找到很多匹配项。

相反,使用 re.match(pattern, text) 获取 match 对象。检查 return 值是否不是 None(表示未找到匹配项),然后对其调用 group(1) 以获取匹配的组。

请注意,您的模式实际上并没有按照您所说的那样进行。如果只想匹配 URL 的初始部分(包括域,但不包括路径),则需要从模式的重复部分中排除斜杠。我会使用 '(http://[^/]+)/'。使用 +? 而不是 + 的非贪婪重复将是另一种选择。

如果您考虑放弃整个 RegEx 方法来处理您的 URL,您可能想尝试使用 urllib 模块。调用 urllib.parse.urlsplit 会将 URL 分解为以下部分:<scheme>://<netloc>/<path>?<query>#<fragment>。 (这可能是 Python 3 中的新功能,尽管我不确定。urllib 模块在版本之间进行了相当多的重新排列。)