要理解?=和?!,首先需要理解前瞻,后顾,负前瞻,负后顾四个概念:
前瞻:exp1(?=exp2) 查找exp2前面的exp1 后顾:(?
要理解?=和?!,首先需要理解前瞻,后顾,负前瞻,负后顾四个概念:
// 前瞻:
exp1(?=exp2) 查找exp2前面的exp1
// 后顾:
(?<=exp2)exp1 查找exp2后面的exp1
// 负前瞻:
exp1(?!exp2) 查找后面不是exp2的exp1
// 负后顾:
(?<!exp2)exp1 查找前面不是exp2的exp1
举例:
"中国人".replace(/(?<=中国)人/, "rr") // 匹配中国人中的人,将其替换为rr,结果为 中国rr
"法国人".replace(/(?<=中国)人/, "rr") // 结果为 法国人,因为人前面不是中国,所以无法匹配到
举例:
s='我这么聪明啊' print(re.sub('(?=这)','为什么',s)) -----------输出--------------- 我为什么这么聪明啊
个人理解(可能是错误的,自己能够明白):?在这里表示一个占位符,exp2的值能够匹配到的话,配合python正则中的sub方法,可以将?变为自己想要的值插入到匹配到的值前面
下面展示一个金额千分位分割的例子:
s1='100000000000000000000000000' print(re.sub('(?=((\d{3})+$))',',',s1)) -----------输出----------- ,100,000,000,000,000,000,000,000,000
解释一下:从结尾开始匹配,三位数字为一组,前面用,分隔开
这里有个问题,因为把边界也替换了,下面为修改后的代码
s1='100000000000000000000000000' print(re.sub('(?=\B((\d{3})+)$)',',',s1)) -----------------输出---------------- 100,000,000,000,000,000,000,000,000
\B在这里表示不匹配边界
这里确实有点难理解,我把自己的想法写在这里,有不对的地方请大伙及时指出,互相学习
原文链接:https://blog.csdn.net/csm0912/article/details/81206848