繁体   English   中英

Python正则表达式:如何从正则表达式中提取内部数据

[英]Python regex: how to extract inner data from regex

我想从这样的正则表达式中提取数据:

<td>[a-zA-Z]+</td><td>[\d]+.[\d]+</td><td>[\d]+</td><td>[\d]+.[\d]+</td>  

我发现了正则表达式的相关问题提取内容,但就我而言,我应该以某种方式进行迭代。

正如辣椒粉在他/她的评论中提到的那样,您需要使用()来标识捕获组,以标识任何匹配文本的所需部分。 要从td标签中获取内容,请更改:

<td>[a-zA-Z]+</td><td>[\d]+.[\d]+</td><td>[\d]+</td><td>[\d]+.[\d]+</td> 

至:

<td>([a-zA-Z]+)</td><td>([\d]+.[\d]+)</td><td>([\d]+)</td><td>([\d]+.[\d]+)</td>
     ^^^^^^^^^           ^^^^^^^^^^^           ^^^^^           ^^^^^^^^^^^
      group 1             group 2              group 3          group 4

然后按编号访问组。 (仅第一行,带有'^'的行以及命名组的名称就在这里,以帮助您查看括号中指定的捕获组。)

dataPattern = re.compile(r"<td>[a-zA-Z]+</td>... etc.")
match = dataPattern.find(htmlstring)
field1 = match.group(1)
field2 = match.group(2)

等等。 但是您应该知道,使用re破解HTML源代码是实现疯狂的途径之一。 输入的HTML中有很多潜在的意外,它们是正常工作的HTML,但是很容易击败您的re:

  • “ <TD>”而不是“ <td>”

  • 标签之间或数据与标签之间的空格

  • “&NBSP;” 空格字符

诸如BeautifulSoup,lxml甚至pyparsing之类的库将使Web爬虫更加健壮。

正如张贴者所阐明的,应从字符串中删除<td>标记。

请注意,您显示给我们的字符串就是这样:一个字符串。 仅在正则表达式函数的上下文中使用时,它才是正则表达式(可以从中编译正则表达式对象)。

您可以像这样简单地删除<td>标记(假设您的字符串存储在s ): s.replace('<td>','').replace('</td>','')

但是要当心陷阱:正如其他人指出的那样,在真正的HTML上下文中,这确实是有限的用途。

此外,您应该意识到,不管剩下什么正则表达式[string],您可能要解析的内容可能都不是您想要的,即,如果没有<td>标签,它不会自动匹配它之前匹配的任何内容!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM