如何在python中重复替换正则表达式?
我想删除html元素的悬空属性如何在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"
我使用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>