想用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)
c# 和这个类似,正则处理很方便,非大文本的话,效率也还可以
MatchCollection mc = Regex.Matches("这是我的iPhone13,那是你的Meta30。",@"(\d+|[a-z]+|[\u4e00-\u9fff]+|[^a-z\u4e00-\u9fff\d]+)",RegexOptions.IgnoreCase);
首选正则表达式
等你遇到正则表达式吃不消时,可尝试 trie 树
你怎么就知道正则表达式实现时,就不是trie 树,或其变种呢