无梦家园

无梦家园
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

小议C#正则表达式

Posted on 2006-05-04 19:44  沧桑雨迢迢  阅读(807)  评论(0编辑  收藏  举报
               正则表达式是对字符串进行操作的一套功能强大的工具,下面简要讨论几个问题.

1.正则表达式能做什么?

        简单总结一下,有:测试判断,查找提取,删除,替换字符串的功能.

        1)测试判断:对于一个给定的字符串,我们可以加以测试其是否满足我们的特定字符串的规则的要求.例如,输入一个字符串,我们要对它进行测试,判断其是否是合法有效的IP地址字符串,以保证字符串是我们需要的。

        2)查找提取:对于一个给定的字符串,我们查找出其中所有满足规则的子字符串.比如:我们要在一个字符串中,查找出所有的出现一个名字的位置,并提取满足规则的子字符串另加它用.

        3)删除:对于一个给定字符串,我们要删除其中符合规则的所有子字符串,.如:我们要将一个字符串中所有出现"abc"的子字符串全删除.

        4)替换:对于一个给定字符串,我们要替换其中符合规则的所有子字符串.如:我们要将一个字符串中所有出现"abc"的子字符串全替换成"ABCDE".

2.我们如何使用正则表达式

        这里,我使用的是.NET类库所提供的一个正则表达式类:System.Text.RegularExpressions.Regex

        当然,也有很多其他的组件提供正则判断引擎,只不过名称或方法名有点不同,但是基础的逻辑是一样的.

       关于正则表达式规则字符串的写法,可查询相关资料文档(本blog有相关内容,自行查阅.),我这里只介绍如何使用正则表达式的一些简单示例.

3.一些示例

1)测试判断:使用Regex.IsMatch方法对字符串加以测试判断,看其是否是我们需要的特定格式的字符串.

//这里我使用一个IP正则表达式规则,能保证输入的字符串是IP地址字符串.

using System;
using System.Text.RegularExpressions;
class App
{
 static void Main()
 {
  //这是IP正则表达式规则字符串(...由于是自己写的,可能不够精简...)
  string pattern = @"^([0-2]{0,1}[0-9]{0,1}[0-9]{1}\.){3}[0-2]{0,1}[0-9]{0,1}[0-9]{1}$";
  //简单编写一些测试字符串,如果有兴趣,可以自己增加测试字符串加以测试
  string[] Inputs = { "255.255.255.0", "127.0.0.1", "djhfdj", "1272.2.2.1", "127.0.0.1a" };
  foreach (string s in Inputs)
  {
   if (Regex.IsMatch(s, pattern)) //只需要这样一个方法调用,就可以自动判断出是否符合规则
    Console.WriteLine(s+" 是正确的IP地址.");
   else
    Console.WriteLine(s + " 不是正确的IP地址.");
  }
  Console.Read();
 }
}

2))查找提取:使用Regex.Match或Regex.Matchs方法查找并提取满足规则的子字符串

<1>//使用Regex.Match方法返回第一个满足正则判断规则的子字符串
using System;
using System.Text.RegularExpressions;

class Program
{
 static void Main()
 {
  string pattern = @"abc";
  //字符串Input是你需要加以操作的目的字符串
  string Input = "fdkabcslabcd";
  //使用Regex.Match方法,将从字符串Input中查找出第一个匹配pattern表达规则的子字符串
  //并返回一个Match对象,此Match对象的Index就是在Input字符串中被找到的满足规则的子字符串索引位置,
  //而Value属性就是满足规则的子字符串的被复制的子字符串
  Match m = Regex.Match(Input, pattern);
  if (m.Success)       //判断是否成功
  {
   Console.WriteLine("在原字符串中的索引位置 "+m.Index + " 查找的结果 " + m.Value);  }
  else
   Console.WriteLine("没有需要查找的字符串.");

  Console.Read();

 }
}

<2>使用Regex.Matchs方法返回所有满足规则的子字符串

using System;
using System.Text.RegularExpressions;

class App
{
 static void Main()
 {
  string pattern = @"abc";
  string Input = "dfkhabcfkdjabcek";
  MatchCollection ms = Regex.Matches(Input, pattern);
  foreach(Match m in ms)
  {
   Console.WriteLine("在原字符串中的索引位置 " + m.Index + " 查找的结果 " + m.Value);
  }
  Console.Read();
 }

}

3)删除:使用Regex.Replace方法,将查找出来的子字符串替换成"",其实就是删除.

using System;
using System.Text.RegularExpressions;

class App
{
 static void Main()
 {
  string pattern = @"abc";
  string Input = "dfkhabcfkdjabcek";
  
  string s = Regex.Replace(Input, pattern,"");
  Console.WriteLine("删除前:" + Input);
  Console.WriteLine("删除后:"+s);
  Console.Read();
 }

}
4)替换:使用Regex.Replace方法,将查找出来的子字符串替换成指定字符串,就是替换啦
using System;
using System.Text.RegularExpressions;

class App
{
 static void Main()
 {
  string pattern = @"abc";
  string Input = "dfkhabcfkdjabcek";
  //直接使用Replace方法指定需要替换的字符串和要替换的字符串
  string s = Regex.Replace(Input, pattern,"|ABC|");
  Console.WriteLine("替换前:" + Input);
  Console.WriteLine("替换后:"+s);
  Console.Read();
 }

}