如何用正则表达式按指定规则拆分字符串:首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
相关产品推荐
相关产品推荐

