如何在Python中用正则替换大小写重复的连续字符?
解决Python正则替换大小写交替的连续重复字符问题
嘿,这个场景我太熟悉了!你原来的正则r"([a-zA-z])\1"只能匹配大小写完全相同的连续重复字符(比如aa或AA),但对Aa这种大小写交替的情况就无能为力了。不过别担心,一行代码就能搞定!
核心解决方案:忽略大小写匹配
只需要给re.sub()加上flags=re.IGNORECASE标志,让正则引擎在匹配时忽略大小写,这样\1就会匹配和捕获组字符相同(不管大小写)的连续重复项:
import re original_word = "Aabrakadaabra" fixed_word = re.sub(r"([a-zA-Z])\1", r"\1", original_word, flags=re.IGNORECASE) print(fixed_word) # 输出:Abrakadabra
这个写法正好满足你的需求——把开头的Aa替换成单个A,得到预期的Abrakadabra。
进阶:处理多个连续重复的情况
如果你的文本里有多个连续重复的字符(比如Aaa、AaA或者aAAa),可以把正则改成r"([a-zA-Z])\1+",这样能一次性匹配所有连续的相同字符(忽略大小写),替换效率更高:
import re original_word = "AaaabrakadAaabra" fixed_word = re.sub(r"([a-zA-Z])\1+", r"\1", original_word, flags=re.IGNORECASE) print(fixed_word) # 输出:Abrakadabra
这里的\1+表示匹配一个或多个和捕获组相同的字符(因为有IGNORECASE,大小写不影响匹配),不管重复多少次,都能直接替换成单个字符。
内容的提问来源于stack exchange,提问作者Fırat Uyulur
相关产品推荐
相关产品推荐

