我正在尝试使用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'}"
其中替换字符串是最初替换的字符串的一部分。我怎么能这样做?
答案 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中的字符将为您提供所需的输出。