我想从这样的正则表达式中提取数据:
<td>[a-zA-Z]+</td><td>[\d]+.[\d]+</td><td>[\d]+</td><td>[\d]+.[\d]+</td>
我找到了相关问题 extract contents of regex 但就我而言,我应该以某种方式进行迭代。
最佳答案
正如 paprika 在他/她的评论中提到的那样,您需要使用 () 来识别任何匹配文本的所需部分以触发捕获组。要从 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's 破解 HTML 源代码是走向疯狂的途径之一。在您输入的 HTML 中潜伏着许多潜在的惊喜,它们是完美工作的 HTML,但很容易打败您的回复:
“
”代替“ ” 标签之间或数据与标签之间的空格
" "间距字符
像 BeautifulSoup、lxml 甚至 pyparsing 这样的库将成为更强大的网络抓取工具。
关于Python 正则表达式 : how to extract inner data from regex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3860881/