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

如何用正则表达式按指定规则拆分字符串:首3大写单拆+后续大小写拆分

解决方案

当然可以实现,你的问题出在正则表达式的匹配优先级上:[A-Z][a-z]*的优先级高于单独的[A-Z],所以第三个大写字母R会和后面的first被合并匹配成Rfirst,而不是单独拆分出R。

方法一:分两步处理(推荐,可读性更高)

先提取前三个大写字母,再对剩余部分应用「大写字母后接小写字母」的拆分规则:

import re

input_str = "FORfirstUpload"
# 提取前三个大写字母,逐个拆分
first_three = list(input_str[:3])
# 处理剩余部分:匹配「大写字母+任意小写字母」或「连续小写字母」
remaining_parts = re.findall(r'[A-Z][a-z]*|[a-z]+', input_str[3:])
# 合并结果
result = first_three + remaining_parts
print(result)  # 输出: ['F', 'O', 'R', 'first', 'Upload']

方法二:单正则表达式实现

如果想用一个正则完成,可以利用正向断言限定前三个位置的匹配规则,确保前三个大写字母被单独匹配,之后的内容按规则拆分:

import re

input_str = "FORfirstUpload"
result = re.findall(r'^[A-Z]|(?<=^[A-Z]{1})[A-Z]|(?<=^[A-Z]{2})[A-Z]|(?<=^[A-Z]{3})([A-Z][a-z]*|[a-z]+)', input_str)
# 过滤空字符串(正则捕获组可能产生空值)
result = [part for part in result if part]
print(result)  # 输出: ['F', 'O', 'R', 'first', 'Upload']

原理说明

  • 分两步的方式逻辑更清晰:前三个字符直接按单个字符拆分,剩余部分用[A-Z][a-z]*匹配首字母大写的单词,用[a-z]+匹配全小写的连续字符。
  • 单正则的方式通过正向断言(?<=^[A-Z]{n})限定匹配位置,确保前三个大写字母被单独提取,之后的内容遵循拆分规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:43:12