我试图解析一些具有令人讨厌的内联样式的html。
它看起来像这样
<span class="text_line" data-complex="0" data-endposition="4:2:86:5:0" data-position="4:2:74:2:0" style="font-family: scala-sans-offc-pro--; width: 100%; word-spacing: -2.66667px; font-size: 24px !important; line-height: 40px; font-variant-ligatures: common-ligatures; display: block; height: 40px; margin-left: 75px; margin-right: 155px;">
我试图仅删除属性值对
word-spacing: -2.66667px;
。这是渔获物,其中有数百条线,没有两条是相同的。有时间隔是word-spacing: -4px
,有时是word-spacing: -3.78632px;
或其他一些随机数。我尝试了漂亮的汤,我想出了如何去除整个标签,这不是我想要的。我不知道如何使用正则表达式。而且我读到最好避免尝试使用正则表达式编辑HTML。
我的想法正确,包括使用漂亮的汤将所有span标签保存到一个变量中,然后使用
string.find()
以单词间距获取所有“ w”的索引,然后找到下一个半列。然后,在获得列表之后,找到一种方法来在这些索引处剪切字符串并将剩余部分重新组合在一起。也许在“;”处分裂更好...目前我不知道了。大脑是油炸和疲倦的。 :P def __init__(self, first_index, last_index):
self.first = first_index
self.last = last_index
def getIndices(text, start_index):
index = CutPointIndex(None, None)
index.first = text.find("word-spacing", start_index, end_index)
if(index.first != -1):
index.last = text.find(";", index.first , end_index)
return index
给像
style="font-family: scala-sans-offc-pro--; width: 100%; word-spacing: -3.71429px;"
或
style="font-family: scala-sans-offc-pro--; width: 100%; word-spacing: -5px;
或预期结果的任何其他值变化
style="font-family: scala-sans-offc-pro--; width: 100%;
最佳答案
我猜想也许您可能想re.sub
变量word-spacing
:
import re
regex = r"\s*word-spacing\s*:\s*[^;]*;"
test_str = '''
style="font-family: scala-sans-offc-pro--; width: 100%; word-spacing: -3.71429px;"
style="font-family: scala-sans-offc-pro--; width: 100%; word-spacing: -5px;"
style="font-family: scala-sans-offc-pro--; width: 100%;"
'''
print(re.sub(regex, "", test_str))
输出量
style="font-family: scala-sans-offc-pro--; width: 100%;"
style="font-family: scala-sans-offc-pro--; width: 100%;"
style="font-family: scala-sans-offc-pro--; width: 100%;"
如果您想探索/简化/修改表达式,它已经
在右上角的面板上进行了说明
regex101.com。如果您愿意,
也可以在this link中观看它的匹配方式
针对一些样本输入。