我试图在html标签内多次获取单词。 对于像这样的实例:
<title>GateUser UserGate</title>
我想要同时使用GateUser&#39;和&#39; UserGate&#39; 我正在使用下一个正则表达式:
re.sub(ur'(<.*>.*)(\b\w{8}\b)(.*</.*>)', r'\1\g<2>ADDED\3', html)
我想替换匹配此\b\w{8}\b
条件的html标记内的任何单词,re.sub只允许一个。
答案 0 :(得分:1)
使用re
来解析不真正需要的HTML,因为你有很多出色的编写库,但仍然有一种方法可以实现你想要的:
让我们说你有一些HTML:
a = """
<title>GateUser UserGate</title>
<div style="something">
KameHame Ha
</div>
"""
现在您可以相对轻松地解析包含innerHtml的标记:
blanks = r"([\s\n\t]+?)" # totally optional depending on code indentation and stuff.
pat = re.compile(r"(<.+>){0}(.*?){0}(</.+>)".format(blanks))
# tuples don't support item assignment, so mapping list, but still tuples fine too.
tags_with_inner = list(map(list, pat.findall(a)))
# [ ['<title>', '', 'GateUser UserGate', '', '</title>'],
# ['<div style="something">', '\n ', 'KameHame Ha', '\n ', '</div>']]
然后仅在内部匹配您的regex
:
only_inner = re.compile(r"\b\w{8}\b") # your expression
for inner in tags_with_inner:
inner[2] = only_inner.sub("ADDED", inner[2])
print ("".join(inner))
# <title>ADDED ADDED</title>
# <div style="something">
# ADDED Ha
# </div>