python正则表达式替换所有内容并同时保留找到的内容,因为的确有许多功能是


除了一些专业的工具,例如ue,大部分编程语言的函数包都挺让人迷惑的,例如Java,js。

因为的确有许多功能是很常用的,但是他们又不提供,非得要程序员自己去实现,或者是利用三方的包.

到底是什么理由了? 为了保证核心的精干,避免可能出现的bug,这是最基础程序的定位。不同spring这样的框架越来越全,越来越庞大,学习和维护越发困难。这是我的猜测。

例如我们会有这样的要求:找到文本中特定内容,并且把找到的部分修饰一下(例如增加一些字符或者添加一些符号)。

直接上代码,读者就能够明白:

import re;

strs="1949前人间正道是沧桑。1949年新中国成立。2019年新中国成立70周年,2023年中国成立74周年,2049年成立100周年。我们期待那一天的到来";
p=re.compile("[0-9]{3,}"); #查找三位数以上的情况
replaceFun=lambda x:''+x+'';
def replaceAndReserve(str,fun):
    foundedList=p.findall("_$_"+str+"_$_");
    splitList=p.split(str);
    if len(splitList)>0:
        newStr="";
        foundQty=len(foundedList);
        i=0;
        while i<foundQty: 
            newStr+=fun(foundedList[i])+splitList[i+1];
            i+=1;
        newStr=splitList[0]+newStr;
        newStr=newStr.replace("_$_","");
        return newStr;
    else:
        return "";

print(replaceAndReserve(strs,replaceFun));

结果:【1949】前人间正道是沧桑。【1949】年新中国成立。【2019】年新中国成立70周年,【2023】年中国成立74周年,【2049】年成立【100】周年。我们期待那一天的到来

注:以上函数是假设源串不会包含"_$_"子串,这是一种取巧的写法。

实现这个并不难,因为上面这个就是基于findall和split基础上,既然已经可以那样,顺便再写一个replace应该不是难事。

 

评论关闭