Python3:将含全大写的字符串转标题格式且不破坏驼峰命名
解决Python中特定字符串转标题格式的需求
需求说明
需要将字符串转换为标题格式,满足以下规则:
- 每个单词首字母大写
- 保留单词内部的单个大写字母(驼峰命名风格)
- 若单词内部存在连续大写字母,仅保留第一个大写,其余转为小写
示例:
>>> a = "TITLE BY DeSoto theHUMUNGUSone" >>> print(myfunc(a)) Title By DeSoto TheHumungusone
问题分析
Python内置的str.title()方法无法满足需求:它会将单词内部所有非首字母转为小写,比如theHUMUNGUSone会被处理成Thehumungusone,既破坏了驼峰结构,也无法正确处理连续大写的情况。
解决方案
通过分割单词+正则替换的方式实现,具体步骤如下:
- 将字符串按空格分割为单个单词
- 对每个单词,先将首字母转为大写
- 用正则匹配单词内部的连续大写字母,将连续部分的第二个及以后字母转为小写
- 拼接处理后的单词得到最终结果
实现代码:
import re def myfunc(s): def replace_continuous_caps(match): # 保留第一个大写字母,后续连续大写转小写 return match.group(1) + match.group(2).lower() processed_words = [] for word in s.split(): if not word: processed_words.append(word) continue # 首字母大写 capped_word = word[0].upper() + word[1:] # 替换连续大写 fixed_word = re.sub(r'([A-Z])([A-Z]+)', replace_continuous_caps, capped_word) processed_words.append(fixed_word) return ' '.join(processed_words)
测试验证
# 测试示例输入 a = "TITLE BY DeSoto theHUMUNGUSone" print(myfunc(a)) # 输出: Title By DeSoto TheHumungusone # 其他测试场景 print(myfunc("HELLO world PyTHoN")) # 输出: Hello World Python print(myfunc("camelCASEExample")) # 输出: Camelcaseexample print(myfunc("SingleCAP")) # 输出: Singlecap
内容的提问来源于stack exchange,提问作者farnsy
相关产品推荐
相关产品推荐

