关于正则表达式结果不一致

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于正则表达式结果不一致相关的知识,希望对你有一定的参考价值。

这个时间点本人还在学习正则表达式,不得不说遇到困惑的地方了。

下面就直接切入主题了,原本是想匹配百家姓的,为了快速看到效果,我使用了RegEx Tester测试工具,看看是否能匹配到

以下为百家姓的部分内容

赵Zhào:造父为周穆王驾车,穆王把赵城赐了给他,其后代以国为姓。赵匡胤是宋代的开国皇帝,据说赵姓放在第一位与此有关。
钱Qián:彭祖的孙子彭孚在西周朝廷中任钱府上士,其后人以其官为姓。
孙Sūn:周文王的一后代叫惠孙,他的后代以他的名字“孙”作为姓。
李Lǐ:皋陶的后人理征因得罪纣王被处死,其妻儿在一棵李子树下摘果充饥得以活命,其后人为纪念李子的救命之恩改为“李”姓。
周Zhōu:唐代为避玄宗名讳,姬姓大臣改姓周。
吴Wú:周太王亶父之子太伯、仲雍建立吴国,其子孙称为吴氏。
郑zhèng:郑桓公遗族以国名为姓。
王Wáng:出自姬姓,为周文王第十五子毕公高的后代。

 由于文章姓氏都在拼音的前面,我刚开始的想法竟然是只要将匹配到拼音前就ok了,于是想当然的用了字母,可是这里的是拼音,结果自然是匹配结果为0,于是我尝试用了第二种方式,也就是把:前的取出来就ok了,于是我的正则表达式为

^[^:]

  如此,我进行了匹配测试,得到以下结果

技术分享

 满心以为成功了,可是我在C#中运行的结果并不太满意,他只匹配了一个姓氏,那就是赵

我不太明白是哪里出了问题

            //读取文件
            string str = File.ReadAllText(@"F:\爬虫网站获取\百家姓.txt",Encoding.UTF8);
            //将匹配到的数据放入匹配集合中
            MatchCollection mc = Regex.Matches(str, @"^[^:]");
            int i = 0;
            //输出匹配字符
            foreach (Match m in mc)
            {
                Console.Write(m + " ");
                i++;
                if (i % 5 == 0)
                {
                    Console.WriteLine();
                }
                
                
            }

  运行结果只有一个字:赵,如果说正则没有错,那为何两种结果?

 

以上是关于关于正则表达式结果不一致的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式不返回结果

通过 Java 正则表达式提取 semver 版本字符串的片段

在 Hive 中使用字符串比较和正则表达式时的不同结果

关于正则表达式取值

分享一个 Java String split 快速分割的方法

正则表达式的贪婪和非贪婪模式