C#中使用正则表达式替换字符串

 正则表达式在查找和替换中特别是用,比如身份证号码检查,字符类型检查等,Python中re模块可以进行正则表达式检查,C#中的正则表达式类是Regex,使用Regex类可以进行复杂的字符串替换等,关键是正则表达式的写法。里有Regex的Matches进行匹配并替换。例如  

"<ns0:等待提交 状态实例编号=\"00000000-0000-0000-0000-000000000000\" 上下文数据=\"{x:Null}\" 查看部门=\"\" 数据表单类型=\"\" 分配超时操作=\"\" 分配职能=\"\" 办理添写业务表单=\"业务申请-地役权登记\" InterfaceType=\"{x:Type ns0:IExternalEvent}\" 接件职能=\"\" 触发器类型=\"\" 下一状态办理人员=\"\" 提交人员=\"\" 管理人员=\"孟凡荣,苏晓蒙,admin\" 办理提交选项=\"提交\" 动态域特殊权限=\"\" 前一状态实例编号=\"00000000-0000-0000-0000-000000000000\" 动态域时限=\"0\" 提交次数=\"0\" 分配时限=\"0\" 权限编号=\"\" 数据表单=\"\" 查看职能=\"\" 提交部门=\"\" 管理部门=\"\" 动态域人员=\"\" 办理人员=\"孟凡荣,苏晓蒙,admin,李柳燕\" 分配部门=\"\" 分配人员=\"\" 状态名称=\"申请\" 提交结果=\"\" 接件部门=\"\" 接件时特殊权限=\"\" x:Name=\"申请\" 动态域职能=\"\" 办理时限=\"0\" 查看人员=\"\" 分配时特殊权限=\"\" 接件超时操作=\"\" 管理时特殊权限=\"\" 调试器=\"\" 接件时限=\"0\" 扩展数据=\"\" 数据分流表达式=\"\" 提交职能=\"\" 提交说明=\"\" 办理时特殊权限=\"编辑\" 管理职能=\"\" 提交方式=\"\" 动态域部门=\"\" EventName=\"submitEvent\" 状态说明=\"\" 办理超时操作=\"\" 是否会签=\"0\" 动态域类型=\"\" 提交日期=\"1900-01-01T00:00:00.0000000\" 启动窗体=\"\" 提交人员特殊权限=\"\" 查看时特殊权限=\"\" 办理查看业务表单=\"\" 状态跟踪器=\"0\" 处理方式=\"\" />\"";

 这是保存在数据库字段中的工作流的xml格式数据,现在要根据“ 状态名称 ”的值替换“办理人员”的值,而中间的“分配部门”等的值是不知道的,可以这样:

string XmlData="......"//上面的字符串

string a = "办理人员=" + "\"" + OldTTransactuser + "\"";//OldTransactuser是程序查出来的办理人员string b = "\"" + " 状态名称=" + "\"" + stepName + "\"";//stepName是程序查出来的状态名称string oldSubmission = a+"(\\w|\\W)*?"+b; //"([" + a + "]" + "[/W|/w]*?" + "[" + b + "])";

string newSubmission = "办理人员=" + "\"" + newTrasactUser + "\"" + " 分配部门=\"\" 分配人员=\"\" 状态名称=" + "\"" + stepName + "\"";//newTrasactUser是新的办理人员

Dictionary<string, string> TemplateDataInfo = new Dictionary<string, string>();
TemplateDataInfo.Add(oldSubmission, newSubmission);
foreach (string key in TemplateDataInfo.Keys)
{   
  Regex reg = new Regex(key);
  Console.WriteLine(reg.ToString());
  MatchCollection matchs = reg.Matches(errString);
  foreach (Match match in matchs)
  {
     XmlData = XmlData.Replace(match.Value, TemplateDataInfo[key]);
  }
}

 

posted @ 2013-03-17 21:03  GIS民工  阅读(1393)  评论(0编辑  收藏  举报