雁过请留痕...
代码改变世界

正则表达式的使用(C#)

2014-09-23 17:23  xiashengwang  阅读(496)  评论(0编辑  收藏  举报

1, C#中与正则表达式相关类。

C#中与正则表达式相关类的几个常用类是Regex,Match,Group,Captrue,RegexOption首先我们看看这几个类的类图关系,如何你有正则表达式基础,从这些方法和属性中就大概能明白使用方法了。

clip_image002

Regex:与正则表达式相关的操作必须通过它来执行的,它还提供了Match,IsMatch,Replace,Split几个静态的方法。

ResgexOptions:初始化Regex实例的时候,可以指定匹配的选项,如忽略大小写,多行模式等。

Match:一个匹配结果,其中还包含分组Group的一个集合。其中Index为0的分组是默认分组,不管正则表达式中有没有分组,这个Group都是存在的。所以在处理自定义的分组时,要跳过这个分组。

Group:一个分组,包含多个Capture。

Capture:一个捕获。

这3个类有继承关系,可以看上面的例子,所以一些属性如Value在3个类中都是存在的。

2, 简单使用

     // 检查是否是数字
            if (Regex.IsMatch("956", "[0-9]+"))
            {
                System.Diagnostics.Debug.WriteLine("数字匹配成功");// 结果:数字匹配成功
            }
            // 检查是否是字母(忽略大小写)
            if (Regex.IsMatch("abcABC", "[a-z]+", RegexOptions.IgnoreCase))
            {
                System.Diagnostics.Debug.WriteLine("字符匹配成功");// 结果:字符匹配成功
            }
            // 替换‘abc’(忽略大小写)为‘@’
            string res = Regex.Replace("i abc like ABC it", "abc", "@", RegexOptions.IgnoreCase);
            // 结果:i @ like @ it

            // 以‘abc’(忽略大小写)拆分字符串
            string[] splits = Regex.Split("i abc like ABC it", "abc", RegexOptions.IgnoreCase);
            // 结果为3个字符串,i,like,it

// 根据匹配结果,打印出Match,Group,Capture的值
                Regex regex = new Regex(this.txtPattern.Text);
                var matches = regex.Matches(this.txtInput.Text);

                string result = string.Empty;
                int count = matches.Count;
                result += "matches.Count:" + count + Environment.NewLine;
                foreach (Match m in matches)
                {
                    result += "matche value:" + m.Value + Environment.NewLine;
                    result += "matche group count:" + m.Groups.Count + Environment.NewLine;
                    for (int i = 0; i < m.Groups.Count; i++)
                    {
                        Group g = m.Groups[i];
                        result += "--group " + (i + 1) + Environment.NewLine;
                        result += "--group Value " + g.Value + Environment.NewLine;
                        result += "--capture count:" + m.Captures.Count + Environment.NewLine;
                        for (int j = 0; j < g.Captures.Count; j++)
                        {
                            Capture c = g.Captures[j];
                            result += "----capture " + (j + 1) + Environment.NewLine;
                            result += "----capture Value " + c.Value + Environment.NewLine;
                        }
                    }
                }

基本的操作就这些了,一般应用中根据需要对捕获的结果进行具体分析。

关于正则表达式的语法可以参考这几篇文章:

正则表达式基础:http://www.cnblogs.com/xiashengwang/p/3988009.html

正则表达式分组:http://www.cnblogs.com/xiashengwang/p/3988573.html