c# regex Match Matches MatchCollection 用法

69 篇文章 1 订阅
30 篇文章 0 订阅

 利用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();
}
}

 

其它常见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 类包含来自单个子表达式捕获的结果。


 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
正则表达式是一种用于匹配文本的强大工具,C#中的Regex类可以帮助我们轻松地使用正则表达式。下面是C#Regex的使用详解。 #### 1. 创建Regex对象 我们可以使用Regex类的构造函数创建一个Regex对象。构造函数需要一个正则表达式字符串作为参数,例如: ``` Regex regex = new Regex(@"\d+"); ``` 上面的代码创建了一个Regex对象,用于匹配一个或多个数字。注意,在正则表达式字符串前面加上@符号可以避免字符转义问题。 #### 2. 匹配字符串 使用Regex对象的Match方法可以匹配字符串。Match方法需要一个要匹配的字符串作为参数,例如: ``` string input = "123abc456"; Match match = regex.Match(input); ``` 上面的代码使用Regex对象regex匹配了字符串input中的数字。Match方法返回一个Match对象,该对象包含匹配结果的详细信息,例如匹配的值、起始位置等。 #### 3. 获取匹配结果 Match对象提供了多个属性和方法用于获取匹配结果的详细信息。下面是常用的一些属性和方法: - Value:获取匹配的值。 - Index:获取匹配的起始位置。 - Length:获取匹配的长度。 - Success:获取匹配是否成功的布尔值。 - Groups:获取匹配的分组。 例如,可以使用下面的代码获取第一个匹配的数字: ``` if (match.Success) { string value = match.Value; int index = match.Index; int length = match.Length; Console.WriteLine("Value: {0}, Index: {1}, Length: {2}", value, index, length); } ``` #### 4. 匹配多个结果 如果要匹配多个结果,可以使用Regex对象的Matches方法。Matches方法需要一个要匹配的字符串作为参数,返回一个MatchCollection对象,该对象包含所有匹配结果的详细信息。例如: ``` string input = "123abc456def789"; MatchCollection matches = regex.Matches(input); foreach (Match match in matches) { string value = match.Value; int index = match.Index; int length = match.Length; Console.WriteLine("Value: {0}, Index: {1}, Length: {2}", value, index, length); } ``` 上面的代码使用Regex对象regex匹配了字符串input中的所有数字,并输出了每个数字的详细信息。 #### 5. 替换字符串 使用Regex对象的Replace方法可以替换字符串中的匹配结果。Replace方法需要三个参数:要替换的字符串、替换后的字符串和一个可选的最大替换次数。例如: ``` string input = "123abc456def789"; string output = regex.Replace(input, "X"); Console.WriteLine(output); ``` 上面的代码使用Regex对象regex将字符串input中的所有数字替换为X,并输出了替换后的字符串。 以上就是C#Regex的使用详解。正则表达式是一种非常强大的工具,可以用于各种文本处理任务。在使用正则表达式时,建议先编写正则表达式字符串,然后使用Regex类进行匹配和替换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值