Python-查找子字符串,然后替换其中的所有字符

时间:2015-01-19 03:11:53

标签: python regex

假设我有这个字符串:

<div>Object</div><img src=#/><p> In order to be successful...</p>

我想用<替换>#之间的每个字母。

所以,经过一些操作后,我希望我的字符串看起来像:

<###>Object<####><##########><#> In order to be successful...<##>

请注意,两个符号之间的每个字符都替换为#(包括空格)。

这是我能得到的最接近的:

   r = re.sub('<.*?>', '<#>', string)

我的代码存在的问题是,<>之间的所有字符都被单个#替换,而我希望每个字符都被{{1}替换}}

我尝试了各种反向引用的混合物,但无济于事。有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:3)

怎么样......:

def hashes(mo):
    replacing = mo.group(1)
    return '<{}>'.format('#' * len(replacing))

然后

r = re.sub(r'<(.*?)>', hashes, string)

使用函数作为re.sub的第二个参数的能力为您提供了构建替换的极大灵活性(并且像往常一样,命名def导致比任何狭窄的lambda更易读的代码 - 你可以使用有意义的名字,普通的布局等等。)

答案 1 :(得分:2)

可以使用函数作为替换函数调用re.sub函数,而不是新字符串。每次匹配模式时,都会使用match对象调用该函数,就像使用re.searchre.finditer一样。

所以试试这个:

re.sub(r'<(.*?)>', lambda m: "<{}>".format("#" * len(m.group(1))), string)