Python正则表达式:如何从正则表达式中提取内部数据
我想从这样的正则表达式中提取数据:Python正则表达式:如何从正则表达式中提取内部数据,python,html,regex,Python,Html,Regex,我想从这样的正则表达式中提取数据: <td>[a-zA-Z]+</td><td>[\d]+.[\d]+</td><td>[\d]+</td><td>[\d]+.[\d]+</td> [a-zA-Z]+[\d]+[\d]+[\d]+[\d]+[\d]+[\d]+ 我发现了相关的问题 但在我的例子中,我应该以某种方式进行迭代。正如paprika在他/她的评论中提到的那样,您需要使用()来确定任何匹
<td>[a-zA-Z]+</td><td>[\d]+.[\d]+</td><td>[\d]+</td><td>[\d]+.[\d]+</td>
[a-zA-Z]+[\d]+[\d]+[\d]+[\d]+[\d]+[\d]+
我发现了相关的问题
但在我的例子中,我应该以某种方式进行迭代。正如paprika在他/她的评论中提到的那样,您需要使用()来确定任何匹配文本的所需部分,以设置捕获组。要从td标签中获取内容,请更改:
<td>[a-zA-Z]+</td><td>[\d]+.[\d]+</td><td>[\d]+</td><td>[\d]+.[\d]+</td>
[a-zA-Z]+[\d]+[\d]+[\d]+[\d]+[\d]+[\d]+
致:
([a-zA-Z]+)([\d]+.[\d]+)([\d]+)([\d]+.[\d]+)
^^^^^^^^^ ^^^^^^^^^^^ ^^^^^ ^^^^^^^^^^^
第1组第2组第3组第4组
然后按编号访问这些组。(只有第一行、带“^”的行和命名组的行在那里,以帮助您查看括号中指定的捕获组。)
dataPattern=re.compile(r“[a-zA-Z]+…等”)
match=dataPattern.find(htmlstring)
field1=匹配。组(1)
field2=匹配。组(2)
等等。但您应该知道,使用re来破解HTML源代码是走向疯狂的途径之一。在您的输入HTML中潜伏着许多潜在的惊喜,它们是完美工作的HTML,但很容易击败您的re:
- “”而不是“”
- 标记之间或数据与标记之间的空格
- “”间距字符
像BeautifulSoup、lxml甚至PyParasting这样的库将有助于实现更强大的web刮取器。正如海报所阐明的,标签应该从字符串中删除 请注意,您显示给我们的字符串就是:一个字符串。只有在正则表达式函数的上下文中使用时,它才是正则表达式(可以从中编译regexp对象) 您可以这样简单地删除标记(假设您的字符串存储在
s
):
s.replace('','').replace('','')
然而,要注意这些问题:正如其他人所指出的,在真正的HTML环境中,这是非常有限的
此外,您应该知道,无论剩下什么正则表达式[string],您可以用它进行解析的内容可能不是您想要的,也就是说,如果没有标记,它不会自动匹配它以前匹配的任何内容 请澄清:您是试图从该字符串中提取数据还是使用该字符串(regex)?对于后者,您需要使用括号来构建组,就像您链接的问题的公认答案一样。我已经使用该字符串提取了数据,现在我想从中提取数据,只需删除标记即可。StackOverflow软件应该在“regex”和HTML标记出现在同一帖子中的任何时候发布此消息。简短版本:regexps无法解析HTML。是的,这是我第一次做的,但我一直在寻找更好的解决方案,更好的关于什么?如果你所做的只是移除东西,那么这样一个简单的解决方案是完全好的。尽量使代码尽可能简单(但不要简单)。
<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)