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

 最近在学习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 "";                    
            }

        }

    }

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值