c# regex Match Matches MatchCollection 用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shan1774965666/article/details/89352817

 利用Match类和MatchCollection类,可以获得通过一个正则表达式实现的每一个匹配的细节。Match表示一次匹配,而MatchCollection类是一个Match对象的集合,其中的每一个对象都表示了一次成功的匹配。

      我们可以使用Regex对象的Match()方法和Matches()方法来检索匹配。

1.Match()方法

前三种方法是实例方法,后两种是静态方法,所有方法都返回一个Match对象,其中包含了匹配的各种细节!注意:Match()对象只代表实现的第一次匹配,而不是所有的匹配!区别于Matches()!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Regular
{
    class Program
    {
        static void Main(string[] args)
        {
            string inStr = "sea sem seg,word,love,sed";
            Regex myRegex=new Regex("se.");
            Match myMatch = myRegex.Match(inStr, 4);
 
            while (myMatch.Success)
            {
                //MessageBox.Show(myMatch.Value);
                Console.WriteLine(myMatch.Value);
                myMatch = myMatch.NextMatch();
            }
             Console.ReadKey();
        }
    }
}

2.MatchCollection()方法

      使用Regex.Matches()方法,可以得到MathCollection对象的一个引用。这个集合类中包含分别代表每一次正则表达式匹配的Match对象。在处理多匹配时尤其有用,而且可以代替Match.NextMatch()方法。

      MatchCollection类有两个有用的属性Count和Item。Count返回匹配的次数,Item允许通过下表访问每一个Match对象!

  MatchCollection mc = Regex.Matches(changeData.FirstOrDefault().Field<string>("BusinessContent").GetNotNullString(), "【(.*?)】");
                            int count = mc.Count;
                            if (count > 0)
                            {
                                drs["GravePosition"] = mc[2].Value.Replace("【", "").Replace("】", ""); 
                            }

MatchCollection mc = Regex.Matches("AA 55 CA 00 CA EE 77", @"(?i)[\da-f]{2}");//正值表达式

            List< byte > buf = new List<byte>();//填充到这个临时列表中    //依次添加到列表中
            foreach (Match m in mc)//数组或对象集合中的每个元素重复一个嵌入语句组
            {
                buf.Add(byte.Parse(m.Value, System.Globalization.NumberStyles.HexNumber));
            }


string text = "1A 2B 3C 4D 5E 6F 7G 8H 9I 10J 11Q 12J 13K 14L 15M 16N ffee80 #800080";
Regex rgx = new Regex(@"((\d+)([a-z]))\s+", RegexOptions.IgnoreCase);
MatchCollection mm = rgx.Matches(text);
string x=mm[5].Groups[2].Captures[0].Value;  //x为第六个集合 第二组 的值 6

/// <summary>
/// 显示Match内多个Group的例子
/// </summary>
public void ShowStructure()
{
//要匹配的字符串
string text = "1A 2B 3C 4D 5E 6F 7G 8H 9I 10J 11Q 12J 13K 14L 15M 16N ffee80 #800080";
//正则表达式
string pattern = @"((\d+)([a-z]))\s+";
//使用RegexOptions.IgnoreCase枚举值表示不区分大小写
Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
//使用正则表达式匹配字符串,仅返回一次匹配结果
Match m = r.Match(text);
while (m.Success)
{
//显示匹配开始处的索引值和匹配到的值
System.Console.WriteLine("Match=[" + m + "]");
CaptureCollection cc = m.Captures;
foreach (Capture c in cc)
{
Console.WriteLine("\tCapture=[" + c + "]");
}
for (int i = 0; i < m.Groups.Count; i++)
{
Group group = m.Groups[i];
System.Console.WriteLine("\t\tGroups[{0}]=[{1}]", i, group);
for (int j = 0; j < group.Captures.Count; j++)
{
Capture capture = group.Captures[j];
Console.WriteLine("\t\t\tCaptures[{0}]=[{1}]", j, capture);
}
}
//进行下一次匹配.
m = m.NextMatch();
}
}
扫描二维码关注公众号,回复: 6162318 查看本文章
其它常见C#正则表达式类:

Regex 类表示不可变(只读)的正则表达式。它还包含各种静态方法,允许在不显式创建其他类的实例的情况下使用其他正则表达式类。

Match 类表示正则表达式匹配操作的结果。Match 类的 Match.Success 匹配是否成功。Match.Index 返回第一个匹配的位置。

MatchCollection 类表示成功的【非重叠】匹配项的序列。MatchCollection 的实例是由 Regex.Matches 方法返回的。

GroupCollection 类表示被捕获的组的集合,并在单个匹配项中返回该捕获组的集合。GroupCollection 的实例在 Match.Groups 属性返回的集合中返回。

CaptureCollection 类表示捕获的子字符串的序列,并返回由单个捕获组所执行的捕获集。由于限定符,捕获组可以在单个匹配中捕获多个字符串。Captures 属性(CaptureCollection 类的对象)作为 Match 和 Group 类的成员提供,目的是便于对捕获的子字符串的集合进行访问。

Group 类表示来自单个捕获组的结果。因为 Group 可以在单个匹配中捕获零个、一个或更多的字符串(使用限定符),所以它包含 Capture 对象的集合。因为 Group 继承自 Capture,所以可以直接访问最后捕获的子字符串(Group 实例本身等价于 Captures 属性返回的集合的最后一项)。

Capture 类包含来自单个子表达式捕获的结果。


 

猜你喜欢

转载自blog.csdn.net/shan1774965666/article/details/89352817