科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件解读 C# 中的正则表达式

解读 C# 中的正则表达式

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

许多的编程语言和工具都包含对正则表达式的支持,.NET基础类库中包含有一个名字空间和一系列可以充分发挥规则表达式威力的类

作者:佚名 来源:blog 2007年11月11日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
基于过程和基于表达式方法的比较

  一般情况下,使用规则表达式的用户可以分为以下二大类:第一类用户尽量不使用规则表达式,而是使用过程来执行一些需要重复的操作;第二类用户则充分利用规则表达式处理引擎的功能和威力,而尽可能少地使用过程。

  对于我们大多数用户而言,最好的方案莫过于二者兼而用之了。我希望这篇文章能够说明.NET语言中regexp类的作用以及它在性能和复杂性之间的优、劣点。

  基于过程的模式

  我们在编程中经常需要用到的一个功能是对字符串中的一部分进行匹配或其他一些对字符串处理,下面是一个对字符串中的单词进行匹配的例子:

string text = "the quick red fox jumped over the lazy brown dog.";
System.Console.WriteLine("text=[" + text + "]");
string result = "";
string pattern = @"\w+|\W+";
foreach (Match m in Regex.Matches(text, pattern))
{
 // 取得匹配的字符串
 string x = m.ToString();
 // 如果第一个字符是小写
 if (char.IsLower(x[0]))
  // 变成大写
  x = char.ToUpper(x[0]) + x.Substring(1, x.Length-1);
  // 收集所有的字符
  result += x;
}

System.Console.WriteLine("result=[" + result + "]");

  正象上面的例子所示,我们使用了C#语言中的foreach语句处理每个匹配的字符,并完成相应的处理,在这个例子中,新创建了一个result字符串。这个例子的输出所下所示:

text=[the quick red fox jumped over the lazy brown dog.]
result=[The Quick Red Fox Jumped Over The Lazy Brown Dog.]

  基于表达式的模式

  完成上例中的功能的另一条途径是通过一个MatchEvaluator,新的代码如下所示:

static string CapText(Match m)
{
 //取得匹配的字符串
 string x = m.ToString();
 // 如果第一个字符是小写
 if (char.IsLower(x[0]))
  // 转换为大写
   return char.ToUpper(x[0]) + x.Substring(1, x.Length-1);
 return x;
}
static void Main()
{
 string text = "the quick red fox jumped over the
 lazy brown dog.";
 System.Console.WriteLine("text=[" + text + "]");
 string pattern = @"\w+";
 string result = Regex.Replace(text, pattern,
 new MatchEvaluator(Test.CapText));
 System.Console.WriteLine("result=[" + result + "]");
}

  同时需要注意的是,由于仅仅需要对单词进行修改而无需对非单词进行修改,这个模式显得非常简单。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章