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

正则表达式:仅将字符串中的全大写内容转换为首字母大写格式

仅将字符串中的全大写单词转换为首字母大写格式

问题核心

你需要只对全大写的单词做首字母大写、其余小写的转换,保留原本非全大写单词的格式(比如已经是首字母大写或全小写的单词不变),而title()/Propper这类通用首字母大写方法会处理所有单词,不符合需求。

Python 实现方案

用正则匹配全大写单词,再针对性转换:

import re

def convert_all_caps_to_title(input_str):
    def process_match(match):
        word = match.group()
        # 分离单词和结尾的标点符号
        punctuation = ''
        if word[-1] in ',!?':
            punctuation = word[-1]
            word = word[:-1]
        # 转成首字母大写,其余小写
        return word[0].upper() + word[1:].lower() + punctuation
    
    # 匹配完整的全大写单词(单词边界确保不会匹配部分大写的内容)
    return re.sub(r'\b[A-Z]+\b', process_match, input_str)

# 测试示例
original = "This is an EXAMPLE SENTENCE, just do give YOU AN Example on Monday, BUT NOT FOR Friday."
converted = convert_all_caps_to_title(original)
print(converted)
# 输出:This is an Example Sentence, just do give You An Example on Monday, But Not For Friday.

代码逻辑说明

  1. 正则\b[A-Z]+\b精准匹配由大写字母组成的完整单词,不会误触部分大写的单词(比如"Example")
  2. 处理函数先分离单词和结尾的标点(逗号、感叹号等),避免标点干扰转换逻辑
  3. 仅对匹配到的全大写单词做格式转换,其他内容完全保留原样

JavaScript 实现方案

如果用JS处理,逻辑类似:

function convertAllCapsToTitle(str) {
    return str.replace(/\b[A-Z]+\b/g, (match) => {
        let punctuation = '';
        let word = match;
        if (',!?'.includes(word.at(-1))) {
            punctuation = word.at(-1);
            word = word.slice(0, -1);
        }
        return word[0].toUpperCase() + word.slice(1).toLowerCase() + punctuation;
    });
}

const originalStr = "This is an EXAMPLE SENTENCE, just do give YOU AN Example on Monday, BUT NOT FOR Friday.";
console.log(convertAllCapsToTitle(originalStr));

为什么不用title()/Propper?

这类方法会遍历字符串中所有单词,强制将每个单词的首字母大写、其余字母小写。比如原本的全小写单词"just"会被转成"Just",但你的需求是只处理全大写的单词,其他单词保持原始格式,所以这类通用方法不适用。

内容的提问来源于stack exchange,提问作者user3392296

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:50:21