日期:2014-05-17  浏览次数:20379 次

正则取得字符串后如何替换成其他字符串
通过论坛网友用以下正则已经取得了字符串了。
foreach(Match m in Regex.Matches(yourstr,@"(?is)\[Fsx\.List.*?\](.*?)\[/Fsx\.List\]"))
  {
  //m.Gropus[1].Value就是你想要的
  }

字符串是取得了,现在又有个问题:如
string aa = "fdfdg[Fsx.List:aa]999888[/Fsx.List]ng[Fsx.List:ghg]kkk[/Fsx.List]bfr[Fsx.List:aa]99988[/Fsx.List]dddff";

通过正则已经取得了三个[Fsx.List:aa][/Fsx.List]之间的字符串了分别为99888,kkk,99888。问题是有两个[Fsx.List:aa]999888[/Fsx.List]或者更多是相同的。我的目的本是为了从原字符串中查找到99888,kkk,99888字符然后把99888替换成00,kk替换成22。最终成字符串"fdfdg[Fsx.List:aa]00[/Fsx.List]ng[Fsx.List:ghg]22[/Fsx.List]bfr[Fsx.List:aa]00[/Fsx.List]dddff";。

------解决方案--------------------
Dictionary<string,string>是KeyValuePair<string,string>的一种键值对集合,表示两个对象(这里是字符串)之间的一种对应关系,以value=obj[key]取值。在这里表示替换规则,当原值是"99888"时替换成"00",当原值是"kkk"时替换成"22",当然你可以添加更多的规则。
m => 是一种lambda表达式的写法。这里用到了Regex.Replace(String, MatchEvaluator)重载方法,MatchEvaluator是替换规则,规则的传入参数m是Match对象,传出参数是替换成字符串,表示把Match对象所匹配到的字符串按照一定的规则替换成所要的字符串。这里Match对象的值m.Value匹配到的就是"99888"、"kkk",按照你的意思,要替换成刚才那个键值对集合中键"99888"、"kk"所对应的值"00"、"22"。所以用rules[m.Value]获取。问号表达式的意思是判断匹配到的字符串在替换规则中时才替换,否则就不做替换。