你好,我想用 Python 编写一个小的辅助工具,它应该处理以下内容:
<tr>
<td><p>L1</p></td>
<td><p>(4.000x2.300x500; 4,6m³)</p></td>
<td><p> </p></td>
<td><p> 1.221 kg</p></td>
</tr>
<tr>
<td><p>L2</p></td>
<td><p>(4.250x2.300x500; 4,9m³)</p></td>
<td><p> </p></td>
<td><p> 1.279 kg</p></td>
</tr>
<tr>
<td><p>L3</p></td>
<td><p>(4.500x2.300x500; 5,2m³)</p></td>
<td><p> </p></td>
<td><p> 1.321 kg</p></td>
</tr>
<tr>
<td><p>L4</p></td>
<td><p>(4.750x2.300x500; 5,5m³)</p></td>
<td><p> </p></td>
<td><p> 1.364 kg</p></td>
</tr>
在本例中,它应该将每个表行的 替换为 ;以及每行第二个表格数据字段中的 )。
我开始像那样用 python 编写代码,我已经可以用正则表达式语句抓取 Volume,但我的逻辑结束于如何将值放在正确的位置。任何想法 ?这是我的代码
import BeautifulSoup
import re
with open('3mmcontainer.html') as f:
content = f.read()
f.close()
#print content
contentsoup = BeautifulSoup.BeautifulSoup(content)
for tablerow in contentsoup.findAll('tr'):
inhalt = str(tablerow.contents[3])
print inhalt
match = re.findall('\;(.*?)\)', inhalt)
print match
# for x in match:
# volumen = x.lstrip()
# print volumen
#f = open('3mmcontainer.html', 'w')
#newdata = f.replace(" ", volumen)
#f.write(newdata)
#f.close()
#m = re.search('\;(.*?)\)', inhalt)
# print m
# volumen = re.compile(r'\;(.*?)\)')
# volumen.match(tablerow.contents[3])
请您参考如下方法:
注意:您不需要调用 close()因为with语句会为您完成。
您可以使用一个简单的函数来转换每一行 ( <tr/> ):
import re
def parse_inhalt(content):
td_list = re.findall(r"<td>(?:(?!</td>).)+</td>", content)
vol_content = td_list[1]
vol = re.findall(r";([^)]+)", vol_content)[0]
return content.replace(" ", vol)
代码很简单:
- 提取
td_list中的每个单元格 - 获取包含体积的第二个单元格的内容
- 找到包含在“;”之间的卷和“)”(不包括那些字符)
- 替换
按量
例如:
inhalt = u"""\
<tr>
<td><p>L4</p></td>
<td><p>(4.750x2.300x500; 5,5m³)</p></td>
<td><p> </p></td>
<td><p> 1.364 kg</p></td>
</tr>"""
print(parse_inhalt(inhalt))
你得到:
<tr>
<td><p>L4</p></td>
<td><p>(4.750x2.300x500; 5,5m³)</p></td>
<td><p> 5,5m³</p></td>
<td><p> 1.364 kg</p></td>
</tr>
您可以使用以下方法删除空格:
vol = re.findall(r";\s*([^)]+)", vol_content)[0]
