如何分段提取中、英、数字、符号混排的字符串

问题遇到的现象和发生背景

想用C#做个程序,把中英文数字符号混编的字符串按照不同类型截取,比如“这是我的iPhone13,那是你的Meta30。”
截取成:
“这是我的”
“iPhone”
“13”
“,”
“那是你的”
“Meta”
“30”
“。”
然后再按顺序把这八个字符串存入到一个集合。

问题相关代码,请勿粘贴截图
    static void Main(string[] args)
    {
        ArrayList al = new ArrayList();
        StringBuilder sb = new StringBuilder
            ("这是我的iPhone 13, 这个是你的Mate 30。");
        StringBuilder resultOfSplit = new StringBuilder();


        for (int i = 0; i < sb.Length; i++)
        {
            if (sb[i] >= 0x4e00 && sb[i] <= 0x9fbb)
            {
                resultOfSplit.Append(sb[i]);
            }
            else
            {
                sb.Remove(0, i);
                break;
            }
            al.Add(resultOfSplit);
        }
    }
运行结果及报错内容

这样只能提取到”这是我的“几个字,但是在sb删除这四个字以后,不知道怎么重新开始继续提取之后的字符串了。

因为break直接结束循环了,所以只截取到了“这是我的“几个字


'这是我的iPhone13,那是你的Meta30。'.match(/(\d+|[a-z]+|[\u4e00-\u9fff]+|[^a-z\u4e00-\u9fff\d]+)/gi)

img

c# 和这个类似,正则处理很方便,非大文本的话,效率也还可以


MatchCollection mc = Regex.Matches("这是我的iPhone13,那是你的Meta30。",@"(\d+|[a-z]+|[\u4e00-\u9fff]+|[^a-z\u4e00-\u9fff\d]+)",RegexOptions.IgnoreCase);

首选正则表达式
等你遇到正则表达式吃不消时,可尝试 trie 树
你怎么就知道正则表达式实现时,就不是trie 树,或其变种呢