关于正则表达式结果不一致
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 版本字符串的片段