Python findall使用正则表达式在HTML标记中获取数据

Python findall使用正则表达式在HTML标记中获取数据,python,html,Python,Html,大家好/Python'ers/RegEx'ers 我在做实验练习,学习Python重新打包。 我有这些数据。我只想获取HTML标记之间的数据。 我尝试了这个“[^()]\d+”,即排除所有HTML标记TBODY或TD或/TD等 它漏掉了1850年的第一个数据 <TBODY><TR><TD>1850</TD><TD>John</TD><TD>-0.339</TD><TD>-0.425<

大家好/Python'ers/RegEx'ers

我在做实验练习,学习Python重新打包。 我有这些数据。我只想获取HTML标记之间的数据。 我尝试了这个“[^()]\d+”,即排除所有HTML标记TBODY或TD或/TD等

它漏掉了1850年的第一个数据

<TBODY><TR><TD>1850</TD><TD>John</TD><TD>-0.339</TD><TD>-0.425</TD></TR></TBODY>
1850John-0.339-0.425

我正在努力

re.findall("[^(<\/?\w+>)]\d+", html_line)
re.findall(“[^()]\d+”,html\u行)
尝试这个
“()”
分组会得到所有HTML标记,我只是想排除所有HTML标记, 正好相反,所以我尝试了
[^()]

提前谢谢。N
PS:问题的一部分是,我不应该使用BeautifulSoup,您通常应该使用BeautifulSoup这样的包,它是用来解析和处理HTML/XML内容的。对HTML使用纯正则表达式并不理想,但您可以尝试以下方法:

inp = "<TBODY><TR><TD>1850</TD><TD>-0.373</TD><TD>-0.339</TD><TD>-0.425</TD></TR></TBODY>"
matches = re.findall(r'<([^>]+)>(-?\d+(?:\.\d+)?)</\1>', inp)
print([i[1] for i in matches])
下面是对所用正则表达式的解释:

<([^>]+)>          match an opening HTML tag, and capture the tag label in \1
(-?\d+(?:\.\d+)?)  then match and capture a positive/negative number, with optional decimal
</\1>              match a closing HTML tag idential to what opened
]+)>匹配打开的HTML标记,并在\1中捕获标记标签
(?\d+(?:\。\d+))然后匹配并捕获一个带可选小数点的正/负数
匹配与打开内容相同的结束HTML标记
<([^>]+)>          match an opening HTML tag, and capture the tag label in \1
(-?\d+(?:\.\d+)?)  then match and capture a positive/negative number, with optional decimal
</\1>              match a closing HTML tag idential to what opened