如何用Python的Regex库同时实现字符串大小写互换?
Python实现字符串大小写互换(低时间复杂度方案)
你的正则思路方向是对的,但lambda里的逻辑没处理好分组判断。正则([A-Z]+)|([a-z]+)会匹配连续的大写或小写字母,每次匹配只会命中其中一个分组(要么group1对应大写,要么group2对应小写)。你需要在lambda里判断哪个分组有值,再执行对应的转换:
import re str_1 = "Www.GooGle.com" def swapLowerUpper(source): return re.sub(r'([A-Z]+)|([a-z]+)', lambda x: x.group(1).lower() if x.group(1) else x.group(2).upper(), source) print(swapLowerUpper(str_1)) # 输出: wWW.gOOgLE.COM
你之前尝试的字典写法逻辑错误,lambda需要返回单一转换结果,而非字典结构。
更高效的方案:使用str.translate(O(n)时间复杂度)
针对大量文本翻译的场景,正则表达式的性能不如Python内置的str.translate方法。该方法基于字符映射表实现,时间复杂度为线性O(n),处理速度更快:
str_1 = "Www.GooGle.com" def swapLowerUpper(source): # 创建大小写互换的映射表:大写转对应小写,小写转对应大写 swap_map = str.maketrans( 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' ) return source.translate(swap_map) print(swapLowerUpper(str_1)) # 输出: wWW.gOOgLE.COM
str.maketrans生成字符到字符的映射字典,translate会根据映射表一次性转换所有字符,非字母字符(如.)会保持原样,完全符合需求。
内容的提问来源于stack exchange,提问作者Mabadai
相关产品推荐
相关产品推荐

