我想在剥离标签后分配HTML的内容。这是我最初删除标签的html:
<tr class="suite">
<td colspan="2" class="totalLabel">Total</td>
<td class="zero number">0</td>
<td class="skipped number">4</td>
<td class="zero number">0</td>
<td class="passRate suite">
0%
</td>
</tr>
使用正则表达式剥离标记的方法:
import re
import os
if os.path.isfile(some_html_file):
with open(some_html_file) as f:
data = f.read()
before = '<td colspan="2" class="totalLabel">Total</td>'
after = '</tr>'
start = data.find(before) + len(before)
stop = data.find(after, start)
d = data[start:stop]
def stripHTMLTags (html):
text = html
rules = [
{ r'>\s+' : u'>'}, # remove spaces after a tag opens or closes
{ r'\s+' : u' '}, # replace consecutive spaces
{ r'[ \t]*<[^<]*?/?>' : u'' }, # remove remaining tags
{ r'^\s+' : u'' } # remove spaces at the beginning
]
for rule in rules:
for (k,v) in rule.items():
regex = re.compile (k)
text = regex.sub (v, text)
return text
print stripHTMLTags(d)
以下是我得到的输出:0400%
但是,我想将每个HTML td标记的内容分配给变量 和 所以,我预期的最终输出 将是:
A = 0
B = 4
C = 0
D = 0%
分配这些变量的最佳方法是什么?另外,有没有一种方法可以组合我的正则表达式的规则,并具有更简单的正则表达式命令形式?其他使用正则表达式的方法会有所帮助。
答案 0 :(得分:0)
现在您正在删除所有标记文本。您不应该这样做,因为标记文本为您提供了识别每个值的开始和结束所需的结构。当数字大于一位数时,你会怎么做? 10384003899 - 前面是103或10或1038?
相反,请修改现有框架。写一个可以使用分组来提取单个TD元素值的正则表达式。就像是
<td>(.*)</td>
(除非我保证不起作用)。然后,您可以遍历您的字符串,一次又一次地匹配该模式,直到它失败,将每个匹配追加到列表中。完成后,您将获得一个值列表,然后您可以随意操作这些值。
答案 1 :(得分:0)
要关注评论,为了完整起见,您可以使用BeautifulSoup
HTML parser来获取总数。
我们的想法是找到td
类的totalLabel
元素并获取next td
siblings:
from bs4 import BeautifulSoup
data = """
<tr class="suite">
<td colspan="2" class="totalLabel">Total</td>
<td class="zero number">0</td>
<td class="skipped number">4</td>
<td class="zero number">0</td>
<td class="passRate suite">
0%
</td>
</tr>
"""
soup = BeautifulSoup(data, "html.parser")
totals = [td.get_text(strip=True)
for td in soup.find("td", class_="totalLabel").find_next_siblings("td")]
print(totals)
打印:
['0', '4', '0', '0%']
答案 2 :(得分:0)
答案不完整(需要最后一步的帮助)
my_html_file内容:
A = 0
B = 4
C = 0
D = 0%
这让我:
{{1}}
如何将r.sub(r&#39; \ 2 \ n&#39;,m)的输出分配给变量,例如:
{{1}}
以上是我的需要。