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

2024-05-16 09:10:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个简单的程序,从给定的网站中提取链接并将其放入列表中。之后,“待办事项”列表中提取的URL也会以同样的方式逐渐得到分析。你知道吗

主程序正在运行,但在下一个版本中,我只想提取主页面并忽略下面的内容(例如www.stackoverflow.com“但不是”www.stackoverflow.com/questions/ask“”)

我试图使用re.findall函数,但由于它是一个list对象,它破坏了我的iterable todo列表的结构。你知道吗

在使用正则表达式时是否有可能只返回字符串?你知道吗

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

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

Tags: 程序recomurl列表网站链接www
1条回答
网友
1楼 · 发布于 2024-05-16 09:10:21

如果您只希望每个输入字符串有一个匹配项,请不要使用findall,因为它的主要目的是查找多个匹配项。你知道吗

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

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

如果您考虑放弃整个RegEx方法来处理您的URL,那么您可能需要尝试使用urllib模块。调用urllib.parse.urlsplit将把URL分成以下几个部分:<scheme>://<netloc>/<path>?<query>#<fragment>。(这可能是python3中的一个新函数,尽管我不确定这一点。urllib模块在版本之间重新排列了不少。)

相关问题 更多 >