//特殊的需求,正则匹配一段字符串中的 504 前后 非数字 并且 //如果504前后 如果有一端为数字就不进行替换操作 //例如:a504a504b504c504a 这种情况504就要进行替换 //数字+504a504+数字 这种情况就不进行替换 //504 这种情况就不进行替换 StringBuilder strIpt = new StringBuilder(this.textBox1.Text.Trim()); string strPattern = @"(?=\D504\D)|(?=\D504$=?)"; int iCount = 0; string strRep = "@@@@@@@@@"; foreach (Match m in Regex.Matches(strIpt.ToString(), strPattern)) { //记录替换之前的字符串的长度 int iLen = strIpt.Length; //重新计算出要替换的字符 int iBegin = m.Index - iCount * (3 - strRep.Length) + 1; //如果长度在length 的范围之内 if (iBegin <= strIpt.Length-3 && m.Index > 0) { strIpt.Replace("504", strRep, iBegin,3); //进行替换 } else if (m.Index == 0) { //m.Index =0 的替换位置和其他的有些区别所以单令做处理了 strIpt.Replace("504", strRep, m.Index + 1, 3); } if (strIpt.Length != iLen) { iCount++; //让替换统计的计数器加 1 } } MessageBox.Show(strIpt.ToString());
实现结果: