如何根据首字母大写分割无空格字符串并提取单词?
提取大驼峰字符串单词的最优方案
嘿,这个需求太常见啦!要从这种大驼峰式(每个单词首字母大写、无空格)的字符串里拆分出单词,同时保留带特殊字符(比如连字符)的完整片段,最优的方法肯定是用正则表达式——简洁高效,还完全贴合你的要求。
核心思路
我们要找的是「不是字符串开头,但后面紧跟着大写字母」的位置,在这些位置插入空格就能完成拆分。这种方式不会碰那些带特殊字符的片段,因为它们内部没有新的大写字母触发拆分。
代码示例(Python)
import re input_str = "TheseAreAFewWordsAndThis-one-contains-wildcards" output_str = re.sub(r'(?<!^)(?=[A-Z])', ' ', input_str) print(output_str) # 输出结果:These Are A Few Words And This-one-contains-wildcards
正则表达式解释
(?<!^):负向零宽断言,确保我们不会在字符串的开头插入空格(不然第一个单词前会多出来个空格)(?=[A-Z]):正向零宽断言,匹配「后面跟着大写字母」的位置re.sub()会把所有匹配到的位置替换成空格,精准拆分每个单词
其他语言示例(JavaScript)
如果用JS写,逻辑完全一致:
const inputStr = "TheseAreAFewWordsAndThis-one-contains-wildcards"; const outputStr = inputStr.replace(/(?<!^)(?=[A-Z])/g, ' '); console.log(outputStr);
这个方案的优势在于:
- 效率高:正则引擎处理零宽断言的速度极快,哪怕是很长的字符串也能瞬间完成
- 适配性强:完全保留特殊字符片段,不需要额外处理
- 代码简洁:一行核心代码就能搞定,可读性也不错
内容的提问来源于stack exchange,提问作者OldSkoolMatt
相关产品推荐
相关产品推荐

