在正则表达式匹配后获取部分数据以替换原始字符串

时间:2015-04-06 13:10:28

标签: python regex python-2.7

我正在尝试使用re.sub替换部分字符串。使用静态替换字符串,我可以这样做:

>>> data = "{'user': <User: some name>, 'user': <User: n0n@m3>}"
>>> test = re.sub(r'\<[^>]*\>', "'something'", data)
>>> test
"{'user': 'something', 'user': 'something'}"

但是,我希望得到最终结果

>>> test
"{'user': 'some name', 'user': 'n0n@m3'}"

其中替换字符串是最初替换的字符串的一部分。我怎么能这样做?

1 个答案:

答案 0 :(得分:4)

您需要使用capturing group

>>> data = "{'user': <User: some name>, 'user': <User: n0n@m3>}"
>>> re.sub(r'<[^:>]*:\s*([^>]*)>', r"'\1'", data)
"{'user': 'some name', 'user': 'n0n@m3'}"

<强>解释

  • <匹配文字<符号。由于它不是正则表达式的charcaterm,因此您无需为了匹配文字<符号而对其进行转义。

  • [^:>]*匹配任何字符,但不匹配冒号或>,零次或多次。

  • :\s*匹配冒号以及以下零个或多个空格。

  • ([^>]*)现在,这会将所有剩余的字符捕获到>符号。

  • 通过替换所有匹配的字符,即整个<..>块,其中包含由单引号括起的组索引1中的字符将为您提供所需的输出。