You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 14:45:23