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

寻求可替代现有函数的正则表达式模式,拆分Pascal-cased文本

Pascal命名字符串拆分问题

我需要将Pascal格式的文本拆分为独立的标记/词汇,例如Hello123AIIsCool应被拆分为["Hello", "123", "AI", "Is", "Cool"]。

拆分规则

  • “词汇”始终以大写字母开头,例如Hello
  • 连续的数字序列应保持完整,例如123需拆分为["123"],而非["1", "2", "3"]
  • 连续的大写字母序列应保持完整,除非最后一个字母是新词汇(符合第一条规则)的开头,例如ABCat需拆分为["AB", "Cat"],而非["ABC", "at"]
  • 字符串不一定包含所有规则的匹配项,例如Hello、HelloAI等任意组合均可能出现。

我尝试了多种正则表达式变体,以下两种方案接近需求但仍有不足:

Version 0

import re

def extract_v0(string: str) -> list[str]:
    word_pattern = r"[A-Z][a-z]*"
    num_pattern = r"\d+"
    pattern = f"{word_pattern}|{num_pattern}"
    extracts: list[str] = re.findall(
        pattern=pattern, string=string
    )
    return extracts

string = "Hello123AIIsCool"
extract_v0(string)

输出:

['Hello', '123', 'A', 'I', 'Is', 'Cool']

Version 1

import re

def extract_v1(string: str) -> list[str]:
    word_pattern = r"[A-Z][a-z]+"
    num_pattern = r"\d+"
    upper_pattern = r"[A-Z][^a-z]*"
    pattern = f"{word_pattern}|{num_pattern}|{upper_pattern}"
    extracts: list[str] = re.findall(
        pattern=pattern, string=string
    )
    return extracts

string = "Hello123AIIsCool"
extract_v1(string)

输出:

['Hello', '123', 'AII', 'Cool']

当前最优方案

该方案结合了正则表达式与循环,可实现需求,但这是否为最优解?是否存在更简洁的纯正则表达式方案?

import re

def extract_v2(string: str) -> list[str]:
    word_pattern = r"[A-Z][a-z]+"
    num_pattern = r"\d+"
    upper_pattern = r"[A-Z][A-Z]*"
    groups = []
    for pattern in [word_pattern, num_pattern, upper_pattern]:
        while string.strip():
            group = re.search(pattern=pattern, string=string)
            if group is not None:
                groups.append(group)
                string = string[:group.start()] + " " + string[group.end():]
            else:
                break
    
    ordered = sorted(groups, key=lambda g: g.start())
    return [grp.group() for grp in ordered]

string = "Hello123AIIsCool"
extract_v2(string)

输出:

['Hello', '123', 'AI', 'Is', 'Cool']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 23:55:10