我想从这样的正则表达式中提取数据:
<td>[a-zA-Z]+</td><td>[\d]+.[\d]+</td><td>[\d]+</td><td>[\d]+.[\d]+</td>
Run Code Online (Sandbox Code Playgroud)
正如辣椒粉在他/她的评论中提到的,你需要使用()来识别任何匹配文本的所需部分以引发捕获组.要从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这样的库将使更强大的网络刮板成为可能.