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

Ivr*_*vri 2 html python regex

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

<td>[a-zA-Z]+</td><td>[\d]+.[\d]+</td><td>[\d]+</td><td>[\d]+.[\d]+</td>  
Run Code Online (Sandbox Code Playgroud)

我发现了正则表达式的相关问题提取内容, 但在我的情况下,我会以某种方式迭代.

Pau*_*McG 7

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

<td>[a-zA-Z]+</td><td>[\d]+.[\d]+</td><td>[\d]+</td><td>[\d]+.[\d]+</td> 
Run Code Online (Sandbox Code Playgroud)

至:

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

然后按编号访问组.(只是第一行,带有'^'的行和命名组的那一行就是帮助你看到括号指定的捕获组.)

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

等等.但是你应该知道使用re来破解HTML源代码是疯狂的途径之一.有许多潜在的惊喜会潜伏在您的输入HTML中,这些都是完美的HTML,但很容易打败你的版本:

  • "<TD>"而不是"<td>"

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

  • "&NBSP;" 间距字符

像BeautifulSoup,lxml,甚至pyparsing这样的库将使更强大的网络刮板成为可能.