Python re.sub用它的md5sum替换匹配

时间:2018-01-08 11:37:25

标签: python regex

我正在尝试解析这样一个字符串:

<@Something> there is some regular text <@something_else> and even more <@foo> <@bar> text

将所有<@tokens>替换为md5总和。

是否可以使用python re.sub?如何将@token传递给函数并将函数的输出传递给re.sub

到目前为止,我尝试过最简单的方法:

import re

def fun(str):
    return str.replace('@', '!')

pattern = r'(<@\w+>)'
string = '<@AAAA> some text and more text <@BBBBB>'

print fun('<@AAAA>')
print string
print re.sub(pattern, fun(r'\1'), string)

没有成功。 fun函数在re.sub()之外按预期工作,但不在其中。

2 个答案:

答案 0 :(得分:1)

是的,正如the documentation所示,&#34;替换&#34; re.sub()的参数可以是一个获取匹配对象并返回替换的函数。

答案 1 :(得分:1)

使用hashlib库: import hashlib,re s =&#39;&lt; @ Something&gt;有一些常规文字&lt; @ something_else&gt;甚至更多&lt; @ foo&gt; &LT; @栏&GT;文&#39; result = re.sub(r&#39;&lt; @ [^&gt;] +&gt;&#39;,lambda m:hashlib.md5(m.group()。encode())。hexdigest(),s) 打印(结果) 输出: eb6eae14fb79abc1339b7096ae00a5e9有一些常规文本16960eadb21d27a1b52e5c71a5ae7357甚至更多281dc7c0420f8e6ef66e58ecb979d087 31c0c5b91906d520a4dec601241833a6文本 https://docs.python.org/3/library/hashlib.html