Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正则表达式:如何从正则表达式中提取内部数据_Python_Html_Regex - Fatal编程技术网

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)