15067441343 发表于 2023-6-21 22:58:25

re.findall('正文(.*?)</tbody>', data, re.S)[0]最后[0]表示什么

toc_url_list = []
toc_block = re.findall('正文(.*?)</tbody>', data, re.S)
toc_url = re.findall('href="(.*?)"', toc_block, re.S)
for url in toc_url:
      toc_url_list.append(start_url + url)
print(toc_block)
运行代码后,标红这行代码,去掉最后横着显示。不去,竖着显示。大神帮解释下,谢谢了

sfqxx 发表于 2023-6-21 23:06:53

这行代码中使用了Python内置的re(正则表达式)模块的findall函数,在指定范围内,查找所有匹配某个特定正则表达式的字符串,并将它们以列表的形式返回。

具体来说,这行代码的作用是从字符串data中匹配出包含字符串“正文”和</tbody>之间的部分,然后通过re.findall函数提取其中所有以“href=”开头的字符串,即链接URL。所以得到的结果是一个包含多个URL链接的列表toc_url。

如果不去掉最后的,输出结果将以包含所有匹配结果的列表形式展示,每个匹配结果为列表中的一个元素。如果去掉最后的,输出结果将只展示第一个匹配结果,以单个字符串的形式展示。

求最佳答案{:10_254:}

isdkz 发表于 2023-6-21 23:07:11

从你提供的Python代码片段来看,这里的是Python中列表索引的概念。

在Python中,列表是一种有序的集合,可以通过索引来访问其中的每一个元素。索引是从0开始的。因此, 就是访问列表中的第一个元素。

代码re.findall('正文(.*?)</tbody>', data, re.S)是使用正则表达式在数据data中查找所有匹配'正文(.*?)</tbody>'模式的字符串。 re.findall函数会返回一个列表,其中包含所有的匹配项。因此, 就是获取这个结果列表中的第一个匹配项。

如果你去掉 ,那么re.findall返回的就是一个包含所有匹配项的列表,而不仅仅是第一个匹配项。

至于你提到的横着显示和竖着显示,我想这可能与你使用的环境或者打印方式有关。如果你直接打印一个列表,通常每个元素会占据一行,看起来像是竖着显示。而如果你打印列表的单个元素,那就会看起来像是横着显示。

希望这能解答你的问题,如果还有其他疑问,欢迎继续提问!

歌者文明清理员 发表于 2023-6-21 23:13:57

sfqxx 发表于 2023-6-21 23:06
这行代码中使用了Python内置的re(正则表达式)模块的findall函数,在指定范围内,查找所有匹配某个特定正 ...

az

陶远航 发表于 2023-6-22 20:46:58

这段代码中标红的一行是使用正则表达式(re模块)在字符串 data 中查找 <tbody> 标签之前的内容,并提取其中以 href 开头的URL链接。 '正文(.*?)</tbody>' 作为正则表达式的模式,表示匹配以 '正文' 开始,随后是任意字符(非贪婪模式),并以 '</tbody>' 结束的部分。

通过使用 re.findall() 函数,可以获取到所有符合模式的结果,这些结果被存储在 toc_url 列表中。接下来,代码将遍历 toc_url 列表中的每个URL,并添加一个完整的URL路径(由 start_url 和 URL半链接构成)到 toc_url_list 列表中。

如果去掉标红的该行代码 ,则不仅仅提取第一个匹配的URL链接,而是提取所有匹配的URL链接。因此,最终的输出列表 toc_url_list 将包含所有在 toc_block 中找到的URL链接。

liuhongrun2022 发表于 2023-6-24 10:22:20

歌者文明清理员 发表于 2023-6-21 23:13
az

az
页: [1]
查看完整版本: re.findall('正文(.*?)</tbody>', data, re.S)[0]最后[0]表示什么