大家好/Python 爱好者/RegEx 爱好者,
我正在做实验练习,学习 Python RE 包。 我有这个数据。我只想抓取 HTML 标签之间的数据。 我尝试了这个“[^(?\w+>)]\d+”,即排除所有 HTML 标签 TBODY 或 TD 或/TD 等
它错过了第一个数据 1850
<TBODY><TR><TD>1850</TD><TD>John</TD><TD>-0.339</TD><TD>-0.425</TD></TR></TBODY>
我正在努力
re.findall("[^(<\/?\w+>)]\d+", html_line)
试试这个 "(<\/?\w+>)"
分组让我获得所有 HTML 标签,我只是排除所有 HTML 标签,
就在对面,所以,我尝试了[^(<\/?\w+>)]
提前致谢。 N。 PS:部分问题是,我不应该使用 BeautifulSoup
最佳答案
您通常应该使用诸如 Beautiful Soup 之类的包,它旨在解析和处理 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])
打印:
['1850', '-0.373', '-0.339', '-0.425']
以下是所使用的正则表达式的说明:
<([^>]+)> 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
关于Python findall 使用正则表达式抓取 HTML 标签内的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59744971/