使用[MatchEvaluator类] - 替换多个字符串

来源:互联网 发布:求职网络推广专员 编辑:程序博客网 时间:2024/04/28 09:48

 最近在学习xml的时候遇上这样一个问题。读取mp3信息然后录入到数据库中的xml字段。

然而mp3信息中,如在标题中存在这样一种特殊情况: 标题包含XML的特殊字符而导致输入出错.

如: Kill'em All 中的 '    You&Me 中的&  还有其他一些诸如'<'  '>'等等.

 

利用正则表达式找出特殊字符

我们当然可以轻易地利用正则表达式查找出那些特殊字符并用Replace()替换掉他们, 如下:

 using System.Text.RegularExpressions;

public class Test
{
    
static void Main(string[] args)
    
{
         
string str = "<You're angle & evil>";
         
string result;

         
//假设特殊字符只有< > ' & 四种
     string pattern = "<|>|'|&":
         Regex regex 
= new Regex(pattern);

         
//假设我们只把他们都替换成  '_'
         result = regex.Replace(str, "_");
         Console.WriteLine(result);
    }

}


//结果很明显
_You_re angle _ evil_

按情况替换为不同的字符

但我遇到的问题是, 我可不想把他们简单的替换成一个没意义的下划线,我想把他们转化为xml能识别的格式。

不幸地,Replace可不直接提供替换为多个目标字符的功能。

于是, 我们可以用到一个叫MatchEvaluatord的类来帮我们解决问题。如下:

using System.Text.RegularExpressions;

class Program
    
{
        
static void Main(string[] args)
        
{
            
string str = "<You're angle & evil>";
            
string pattern = "'|&|<|>";

            Regex regex 
= new Regex(pattern);

            Program prog 
= new Program();
            MatchEvaluator evaluator 
= new MatchEvaluator(prog.ConvertToXML);
            Console.WriteLine(regex.Replace(str, evaluator));
            Console.Read();
        }


        
//把正则表达式的匹配到的字符转换成xml能正常识别的标识
        public string ConvertToXML(Match m)
        
{
            
switch (m.Value)
            
{
                
case "'":
                    
return "&apos";
                
case "&":
                    
return "&amp";
                
case "<":
                    
return "&lt";
                
case ">":
                    
return "&gt";
                
default:
                    
return "";                    
            }

        }

    }

不知此法是否最佳, 还望各位赐教.

原创粉丝点击