首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

再问正则表达式,为什么字符串过长之后就失效了?解决办法

2012-01-30 
再问正则表达式,为什么字符串过长之后就失效了?stringPhoneNumberString03728566232,13137132770,132371

再问正则表达式,为什么字符串过长之后就失效了?
string   PhoneNumberString   =   "03728566232,13137132770,13237132770,13337132770,13437132770,13537132770,13637132770,13737132770,13837132770,13937132770,037155555555,02155555555,01033333333,03736566526 ";
string   result1   =   Regex.Replace(PhoneNumberString,   @ "1(?:3[0-3]|53)[0-9]{8}(?:,|$)|0([0-9]{10})(?:,|$)|0([0-9]{11})(?:,|$) ",   " ");   //移动
string   result2   =   Regex.Replace(PhoneNumberString,   @ "1(?:3[4-9]|5[89])[0-9]{8}(?:,|$)|0([0-9]{10})(?:,|$)|0([0-9]{11})(?:,|$) ",   " ");   //联通
string   result3   =   Regex.Replace(PhoneNumberString,   @ "1(?:3[0-3]|53)[0-9]{8}(?:,|$)|1(?:3[4-9]|5[89])[0-9]{8}(?:,|$) ",   " ");   //小联通  
MessageBox.Show( "移动: "   +   result1   +   "\n联通: "   +   result2   +   "\n小灵通: "   +   result3);
---------------------
//上面程序运行没问题,很正常
可是如果是从文本文件里把10万行数据读到String里,它就失效了.
为什么呢?有什么办法解决吗?

[解决办法]
尝试把3个正则合并起来。
[解决办法]
{
string PhoneNumberString = "03728566232,13137132770,13237132770,13337132770,13437132770,13537132770,13637132770,13737132770,13837132770,13937132770,037155555555,02155555555,01033333333,03736566526 ";
string result1 =GetPhone(PhoneNumberString,@ "13[4-9]\d{8} ");//移动
string result2 =GetPhone(PhoneNumberString,@ "13[0-3]\d{8} ");//联通
string result3 =GetPhone(PhoneNumberString,@ "(? <=^|,)[^1]\d+(?=,|$) ");//小灵通
}
/// <summary>
/// 获取要的电话
/// </summary>
/// <param name= "inputString "> 输入字符串 </param>
/// <param name= "pattern "> 正则 </param>
/// <returns> 匹配后字符串 </returns>
private string GetPhone(string inputString ,string pattern)
{
StringBuilder sb=new StringBuilder();
MatchCollection mc = Regex.Matches(inputString ,pattern);
foreach(Match m in mc)
{
sb.Append(m.Value);
sb.Append( ", ");
}
return sb.ToString();
}
//类似于这样的写法,会及大的节约内存(正则不是很准15开头的不知道)
//另,一行行匹配是最好的解决方案

热点排行