如何在python中重复替换正则表达式?

如何在python中重复替换正则表达式?,python,regex,Python,Regex,我想删除html元素的悬空属性 我使用regexre.sub(r')(使用re.findall标记这些部分 import re string_list = ['<div>\n<tag valid1="o n e" valid2=two some dangling></tag>\n<tag valid1="o n e" valid2=two some dangling/>\n</div>', '<tag valid1="o n e"

我想删除html元素的悬空属性


我使用regex
re.sub(r')(使用
re.findall
标记这些部分

import re
string_list = ['<div>\n<tag valid1="o n e" valid2=two some dangling></tag>\n<tag valid1="o n e" valid2=two some dangling/>\n</div>', '<tag valid1="o n e"\n valid2=two some dangling></tag>']
for string in string_list:
    output = ''
    for pre, attrs, post in re.findall(r'([^<]*</?\w+)\b(.*?)(/?>[^<]*)', string, re.DOTALL):
        output += pre + ''.join([attr[0] for attr in re.findall(r'(\s+\w+=(?:([\'"]).*?\2|\S+))|\S+', attrs)]) + post
    print(output)
重新导入
字符串列表=['\n\n\n',']
对于字符串列表中的字符串:
输出=“”

对于pre,attrs,post in re.findall(r'([^我选择使用
HTMLParser
来解析HTML,而不是预处理HTML,并使用
ElementTree
将HTML解析为XML。

尝试用正则表达式解析HTML非常脆弱。使用实际的HTML解析器更容易、更安全。@user2357112我想使用
ElementTree
来解析它,但它只支持XMLxml,它不允许悬空属性。这就是我想这样做的原因。像这样的项目使数据提取更加容易。@user2357112这在2.7中不可用:(
/>
将再次更新
\n\n
怎么样?
valid2
缺失。无论如何,非常感谢您的耐心。我选择使用
HTMLParser
ElementTree
string='
重建html,生成
'tag valid1=“o n e”\n valid2=two some dangling>“
”是不正确的(缺少前导的
,这很好,但是您如何实现您的解决方案?请稍后读者了解。
import re
string_list = ['<div>\n<tag valid1="o n e" valid2=two some dangling></tag>\n<tag valid1="o n e" valid2=two some dangling/>\n</div>', '<tag valid1="o n e"\n valid2=two some dangling></tag>']
for string in string_list:
    output = ''
    for pre, attrs, post in re.findall(r'([^<]*</?\w+)\b(.*?)(/?>[^<]*)', string, re.DOTALL):
        output += pre + ''.join([attr[0] for attr in re.findall(r'(\s+\w+=(?:([\'"]).*?\2|\S+))|\S+', attrs)]) + post
    print(output)
<div>
<tag valid1="o n e" valid2=two></tag>
<tag valid1="o n e" valid2=two/>
</div>
<tag valid1="o n e"
 valid2=two></tag>