使用[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_
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 "&";
case "<":
return "<";
case ">":
return ">";
default:
return "";
}
}
}
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 "&";
case "<":
return "<";
case ">":
return ">";
default:
return "";
}
}
}
不知此法是否最佳, 还望各位赐教.
- 使用[MatchEvaluator类] - 替换多个字符串
- matchevaluator
- 一次替换多个字符串,批量替换多个字符串
- str_replace(),使用数组一次调用替换多个字符串
- 字符串多个范围替换
- 一次替换多个词,批量替换多个字符串(使用不了的解决办法)
- 多个文件中的字符串批量替换
- ruby如何替换字符串的多个?
- 替换多个文件中的同一个字符串
- Python同时替换多个字符串
- sed awk 替换 多个 文件 字符串
- php替换多个字符串str_replace函数
- sed awk 替换 多个 文件 字符串
- java 字符串替换函数replace ,如何同时替换多个字符串?
- 9.1.8 使用委托MatchEvaluator处理匹配结果
- linux sed 批量替换文本多个文件中的字符串
- linux sed 批量替换多个文件中的字符串
- sed 命令替换多个文件中的某个字符串
- 经典算法(1)——8皇后问题求解(回溯法)
- 难得自在
- ORACLE中的子查询
- oracle的rownum及分页
- 今天是休息的一天
- 使用[MatchEvaluator类] - 替换多个字符串
- Christian_J尊敬的男人们
- 数据库系列之死锁(三)
- [tamarin系列之1] tamarin简介
- 中医药走上信息路
- 读书——《The C programming Language》
- 网络人——老板的助手、超强的远程监控利器
- 细说XML
- 浅谈javascript函数劫持