Python正则表达式多次

时间:2016-11-16 14:28:22

标签: python regex python-2.7

我试图在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只允许一个。

1 个答案:

答案 0 :(得分:1)

使用re来解析不真正需要的HTML,因为你有很多出色的编写库,但仍然有一种方法可以实现你想要的:

  • 解析标签。
  • 更改他们的内部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>