Использование re
для разбора HTML не действительно необходимо, как у вас есть много блестяще написанных библиотек для этого, но все же, как вы можете добиться того, что вы хотите от:
- разборе тегов.
- изменить их innerHtml.
Допустим, у вас есть некоторые 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>
Рука 're.sub' четвертый параметр:' re.GLOBA L'. – L3viathan
непонятно, не могли бы вы немного разобраться? вы хотите заменить слова или что-нибудь внутри тега? –
Regex и html не сочетаются вместе ([обязательная ссылка] (https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags)). Почему бы вам не использовать синтаксический анализатор html для получения текстового содержимого тега, а затем изменить только это? – mata