C#利用正则表达式实现字符串搜索
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
AbcAbcAbc Starts at character 3 Captures count = 3 Abc Starts at character 3 Abc Starts at character 6 Abc Starts at character 9 3.6 Capture 类包含来自单个子表达式捕获的结果 在 Group 集合中循环,从 Group 的每一成员中提取 Capture 集合,并且将变量 posn 和 length 分别分配给找到每一字符串的初始字符串中的字符位置,以及每一字符串的长度。 Regex r; Match m; CaptureCollection cc; int posn, length; r = new Regex("(abc)*"); m = r.Match("bcabcabc"); for (int i=0; m.Groups[i].Value != ""; i++) { cc = m.Groups[i].Captures; for (int j = 0; j < cc.Count; j++) { posn = cc[j].Index; //捕获对象位置 length = cc[j].Length; //捕获对象长度 } }
} 3.3 MatchCollection 类表示非重叠匹配的序列 该集合为只读的,并且没有公共构造函数。MatchCollection 的实例是由 Regex.Matches 属性返回的。使用 Regex 类的 Matches 方法,通过在输入字符串中找到的所有匹配填充 MatchCollection。下面代码示例演示了如何将集合复制到一个字符串数组(保留每一匹配)和 一个整数数组(指示每一匹配的位置)中。 MatchCollection mc; String[] results = new String[20]; int[] matchposition = new int[20]; Regex r = new Regex("abc"); //定义一个Regex对象实例 mc = r.Matches("123abc4abcd"); for (int i = 0; i < mc.Count; i++) //在输入字符串中找到所有匹配 { results[i] = mc[i].Value; //将匹配的字符串添在字符串数组中 matchposition[i] = mc[i].Index; //记录匹配字符的位置 } 3.4 GroupCollection 类表示捕获的组的集合 该集合为只读的,并且没有公共构造函数。GroupCollection 的实例在 Match.Groups 属 性返回的集合中返回。下面的控制台应用程序查找并输出由正则表达式捕获的组的数目。 using System; using System.Text.RegularExpressions; public class RegexTest { public static void RunTest() { Regex r = new Regex("(a(b))c"); //定义组 Match m = r.Match("abdabc");
把组合字符组合起来后,每次都会返回一个组对象,就可能并不是我们希望的结果。如果 希望把组合字符作为搜索模式的一部分,就会有相当大的系统开销。对于单个的组,可以用以 字符序列"?:"开头的组禁止这么做,就像URI样例那样。而对于所有的组,Fra Baidu bibliotek以在 RegEx.Matches()方法上指定RegExOptions.ExplicitCapture标志。
Regex r = new Regex("(Abc)+"); //查找"Abc" m = r.Match("XYZAbcAbcAbcXYZAbcAb"); //设定要查找的字符串 gc = m.Groups; //输出查找组的数目 Console.WriteLine("Captured groups = " + gc.Count.ToString()); // Loop through each group. for (int i=0; i < gc.Count; i++) //查找每一个组 { cc = gc[i].Captures; counter = cc.Count; Console.WriteLine("Captures count = " + counter.ToString()); for (int ii = 0; ii < counter; ii++) { // Print capture and position. Console.WriteLine(cc[ii] + " Starts at character " + cc[ii].Index); //输入捕获位置 } } } public static void Main() { RunTest(); } } 此例返回下面的输出结果: Captured groups = 2 Captures count = 1
C#利用正则表达式实现字符串搜索 2005-08-04 22:27 作者:张志远 来源:天极网
【简 介】 本文给出了在C#下利用正则表达式实现字符串搜索功能的方法,通过对.NET框架下的正则表达 式的研究及实例分析,总结了正则表达式的元字符、规则、选项等。 加入收藏 设为首页
------------------------------------------------------------------------------- 3、.NET 框架的正则表达式类 下面通过介绍 .NET 框架的正则表达式类,熟悉一下.NET框架下的正则表达式的使用方 法。 3.1 Regex 类表示只读正则表达式 Regex 类包含各种静态方法,允许在不显式实例化其他类的对象的情况下使用其他正则表 达式类。以下代码示例创建了 Regex 类的实例并在初始化对象时定义一个简单的正则表达式。 请注意,使用了附加的反斜杠作为转义字符,它将 \s 匹配字符类中的反斜杠指定为原义字 符。 Regex r; // 声明一个 Regex类的变量 r = new Regex("\\s2000"); // 定义表达式 3.2 Match 类表示正则表达式匹配操作的结果 以下示例使用 Regex 类的 Match 方法返回 Match 类型的对象,以便找到输入字符串中第 一个匹配。此示例使用 Match 类的 Match.Success 属性来指示是否已找到匹配。 Regex r = new Regex("abc"); // 定义一个Regex对象实例 Match m = r.Match("123abc456"); // 在字符串中匹配 if (m.Success) { Console.WriteLine("Found match at position " + m.Index); //输入匹配字符的位 置
Console.WriteLine("Number of groups found = " + m.Groups.Count); } public static void Main() { RunTest(); } } 该示例产生下面的输出: Number of groups found = 3 3.5 CaptureCollection 类表示捕获的子字符串的序列 由于限定符,捕获组可以在单个匹配中捕获多个字符串。Captures属性 (CaptureCollection 类的对象)是作为 Match 和 group 类的成员提供的,以便于对捕获的 子字符串的集合的访问。例如,如果使用正则表达式 ((a(b))c)+(其中 + 限定符指定一个或 多个匹配)从字符串"abcabcabc"中捕获匹配,则子字符串的每一匹配的 Group 的 CaptureCollection 将包含三个成员。 下面的程序使用正则表达式 (Abc)+来查找字符串"XYZAbcAbcAbcXYZAbcAb"中的一个或多 个匹配,阐释了使用 Captures 属性来返回多组捕获的子字符串。 using System; using System.Text.RegularExpressions; public class RegexTest { public static void RunTest() { int counter; Match m; CaptureCollection cc; GroupCollection gc;