[英]How to Extract data from specified position to some lines by python regex
[英]Python regex: how to extract inner data from regex
正如辣椒粉在他/她的评论中提到的那样,您需要使用()来标识捕获组,以标识任何匹配文本的所需部分。 要从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.