C#用正则表达式Regex.Matches 方法检查字符串中重复出现的词

本文主要是介绍C#用正则表达式Regex.Matches 方法检查字符串中重复出现的词,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、Regex.Matches 方法

1.重载 

二、Matches(String, String, RegexOptions, TimeSpan)

1.定义

2.示例

三、Matches(String, String, RegexOptions)

1.定义

2.示例

3.示例:用正则表达式检查字符串中重复出现的词

四、Matches(String, Int32)

1.定义

2.示例

五、Matches(String)

六、Matches(String, String)

1.定义

2.源码 


        可以将正则表达式理解为描述某些规则的工具,使用正则表达式可以方便地对字符串进行查找和替换的操作。

        使用正则表达式用Regex类的Matches方法,可以检查字符串中重复出现的词。

一、Regex.Matches 方法

        在输入字符串中搜索正则表达式的所有匹配项并返回所有匹配。

1.重载 

Matches(String, String, RegexOptions, TimeSpan)

使用指定的匹配选项和超时间隔在指定的输入字符串中搜索指定的正则表达式的所有匹配项。

Matches(String, String, RegexOptions)

使用指定的匹配选项在指定的输入字符串中搜索指定的正则表达式的所有匹配项。

Matches(String, Int32)

从字符串中的指定起始位置开始,在指定的输入字符串中搜索正则表达式的所有匹配项。

Matches(String)

在指定的输入字符串中搜索正则表达式的所有匹配项。

Matches(String, String)

在指定的输入字符串中搜索指定的正则表达式的所有匹配项。

二、Matches(String, String, RegexOptions, TimeSpan)

        使用指定的匹配选项和超时间隔在指定的输入字符串中搜索指定的正则表达式的所有匹配项。

1.定义

using System.Text.RegularExpressions;public static MatchCollection Matches(string input, string pattern, RegexOptions options, TimeSpan matchTimeout);参数
input    String
要搜索匹配项的字符串。pattern    String
要匹配的正则表达式模式。options    RegexOptions
枚举值的按位组合,这些枚举值指定用于匹配的选项。matchTimeout    TimeSpan
超时间隔;若要指示该方法不应超时,则为 InfiniteMatchTimeout。返回    MatchCollection
搜索操作找到的 Match 对象的集合。 如果未找到匹配项,则此方法将返回一个空集合对象。例外
ArgumentException
出现正则表达式分析错误。ArgumentNullException
input 或 pattern 为 null。ArgumentOutOfRangeException
options 不是 RegexOptions 值的有效按位组合。
- 或 -
matchTimeout 为负、零或大于 24 天左右。

2.示例

// 调用 Matches(String, String, RegexOptions, TimeSpan) 方法
// 以执行区分大小写的比较,该比较匹配以“es”结尾的句子中的任何单词。
// 然后, 调用Matches(String, String, RegexOptions, TimeSpan) 方法
// 对模式与输入字符串执行不区分大小写的比较。
// 在这两种情况下,超时间隔都设置为 1 秒。
// 这两种方法返回不同的结果。
using System.Text.RegularExpressions;namespace _084_1
{public class Example{public static void Main(){string pattern = @"\b\w+es\b";string sentence = "NOTES: Any notes or comments are optional.";// 调用方法不区分大小写try{foreach (Match match in Regex.Matches(sentence, pattern,RegexOptions.None,TimeSpan.FromSeconds(1)).Cast<Match>())Console.WriteLine("Found '{0}' at position {1}",match.Value, match.Index);}catch (RegexMatchTimeoutException){// Do Nothing: Assume that timeout represents no match.}Console.WriteLine();// 调用方法区分大小写try{foreach (Match match in Regex.Matches(sentence, pattern, RegexOptions.IgnoreCase).Cast<Match>())Console.WriteLine("Found '{0}' at position {1}",match.Value, match.Index);}catch (RegexMatchTimeoutException) { }}}
}
// 运行结果:
/*
Found 'notes' at position 11Found 'NOTES' at position 0
Found 'notes' at position 11*/

        其中,正则表达式模式 \b\w+es\b 的定义:\b代表在单词边界处开始匹配。\w+代表匹配一个或多个单词字符。es代表匹配单词尾文本字符串“es”。\b代表在单词边界处结束匹配。

三、Matches(String, String, RegexOptions)

        使用指定的匹配选项在指定的输入字符串中搜索指定的正则表达式的所有匹配项。

1.定义

using System.Text.RegularExpressions;public static MatchCollection Matches (string input, string pattern, RegexOptions options);参数
input    String
要搜索匹配项的字符串。pattern    String
要匹配的正则表达式模式。options    RegexOptions
枚举值的按位组合,这些枚举值指定用于匹配的选项。返回
MatchCollection
搜索操作找到的 Match 对象的集合。 如果未找到匹配项,则此方法将返回一个空集合对象。例外
ArgumentException
出现正则表达式分析错误。ArgumentNullException
input 或 pattern 为 null。ArgumentOutOfRangeException
options 不是 RegexOptions 值的有效按位组合。

2.示例

// 调用 Matches(String, String) 方法以标识以“es”结尾的句子中的任何单词,
// 再调用 Matches(String, String, RegexOptions) 方法对模式与输入字符串执行不区分大小写的比较。
// 这两种方法返回不同的结果。
using System.Text.RegularExpressions;namespace _084_2
{public class Example{public static void Main(){string pattern = @"\b\w+es\b";string sentence = "NOTES: Any notes or comments are optional.";// 调用方法并区别大小写foreach (Match match in Regex.Matches(sentence, pattern).Cast<Match>())Console.WriteLine("Found '{0}' at position {1}",match.Value, match.Index);Console.WriteLine();// 调用方法并不区别大小写foreach (Match match in Regex.Matches(sentence, pattern, RegexOptions.IgnoreCase).Cast<Match>())Console.WriteLine("Found '{0}' at position {1}",match.Value, match.Index);}}
}
// 运行结果:
/*
Found 'notes' at position 11Found 'NOTES' at position 0
Found 'notes' at position 11*/ 

3.示例:用正则表达式检查字符串中重复出现的词

// 用正则表达式检查字符串中重复出现的词
using System.Text.RegularExpressions;namespace _084
{public partial class Form1 : Form{private GroupBox? groupBox1;private Label? label1;private Button? button1;public Form1(){InitializeComponent();Load += Form1_Load;}private void Form1_Load(object? sender, EventArgs e){// // label1// label1 = new Label{AutoSize = true,Location = new Point(16, 31),Name = "label1",Size = new Size(43, 17),TabIndex = 1,Text = "label1"};// // button1// button1 = new Button{Location = new Point(151, 70),Name = "button1",Size = new Size(75, 23),TabIndex = 2,Text = "检查",UseVisualStyleBackColor = true};button1.Click += Button1_Click;// // groupBox1// groupBox1 = new GroupBox{Location = new Point(12, 12),Name = "groupBox1",Size = new Size(380, 99),TabIndex = 0,TabStop = false,Text = "检查字符串重复词"};groupBox1.Controls.Add(label1);groupBox1.Controls.Add(button1);groupBox1.SuspendLayout();// // Form1// AutoScaleDimensions = new SizeF(7F, 17F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(404, 123);Controls.Add(groupBox1);Name = "Form1";StartPosition = FormStartPosition.CenterScreen;Text = "检查字符串中重复出现的词";groupBox1.ResumeLayout(false);groupBox1.PerformLayout();label1!.Text = "The the quick brown fox  fox jumped over the lazy dog dog.";}/// <summary>/// 使用正则表达式查找重复出现单词的集合/// 如果集合中有内容遍历集合,获取重复出现的单词/// </summary>private void Button1_Click(object? sender, EventArgs e){MatchCollection matches = MyRegex().Matches(label1!.Text);if (matches.Count != 0){//第一种等效foreach,LINQforeach (var word in from Match match in matches.Cast<Match>()//Cast强制显示转换let word = match.Groups["word"].Valueselect word){MessageBox.Show(word.ToString(), "英文单词");}第二种等效foreach//foreach (Match match in matches.Cast<Match>())//{//    string word = match.Groups["word"].Value;//    MessageBox.Show(word.ToString(), "英文单词");//}第三种等效for//for (int i = 0; i < matches.Count; i++)//{//    Match match = matches[i];//    string word = match.Groups["word"].Value;//    MessageBox.Show(word.ToString(), "英文单词");//}}else { MessageBox.Show("没有重复的单词"); }}[GeneratedRegex(@"\b(?<word>\w+)\s+(\k<word>)\b", RegexOptions.IgnoreCase | RegexOptions.Compiled, "zh-CN")]private static partial Regex MyRegex();}
}

 

四、Matches(String, Int32)

        从字符串中的指定起始位置开始,在指定的输入字符串中搜索正则表达式的所有匹配项。

1.定义

using System.Text.RegularExpressions;
public MatchCollection Matches (string input, int startat);参数
input    String
要搜索匹配项的字符串。startat    Int32
在输入字符串中开始搜索的字符位置。返回
MatchCollection
搜索操作找到的 Match 对象的集合。 如果未找到匹配项,则此方法将返回一个空集合对象。例外
ArgumentNullException
input 为 null。ArgumentOutOfRangeException
startat 小于零或大于 input 的长度。

2.示例

// 使用 Match(String) 方法查找以“es”结尾的句子中的第一个单词,
// 然后调用 Matches(String, Int32) 方法以标识以“es”结尾的任何其他单词。
using System.Text.RegularExpressions;namespace _084_3
{public class Example{public static void Main(){string pattern = @"\b\w+es\b";Regex regex = new(pattern);string sentence = "Who writes these notes and uses our paper?";// Get the first match.Match match = regex.Match(sentence);if (match.Success){Console.WriteLine("Found first 'es' in '{0}' at position {1}",match.Value, match.Index);// Get any additional matches.foreach (Match m in regex.Matches(sentence, match.Index + match.Length).Cast<Match>())Console.WriteLine("Also found '{0}' at position {1}",m.Value, m.Index);}}}
}
// 运行结果:
/*
Found first 'es' in 'writes' at position 4
Also found 'notes' at position 17
Also found 'uses' at position 27*/

五、Matches(String)

        在指定的输入字符串中搜索正则表达式的所有匹配项。

using  System.Text.RegularExpressions;
public MatchCollection Matches (string input);参数
input    String
要搜索匹配项的字符串。返回
MatchCollection
搜索操作找到的 Match 对象的集合。 如果未找到匹配项,则此方法将返回一个空集合对象。例外
ArgumentNullException
input 为 null。

六、Matches(String, String)

        在指定的输入字符串中搜索指定的正则表达式的所有匹配项。

1.定义

using System.Text.RegularExpressions;
public static MatchCollection Matches (string input, string pattern);参数
input    String
要搜索匹配项的字符串。pattern    String
要匹配的正则表达式模式。返回
MatchCollection
搜索操作找到的 Match 对象的集合。 如果未找到匹配项,则此方法将返回一个空集合对象。例外
ArgumentException
出现正则表达式分析错误。ArgumentNullException
input 或 pattern 为 null。

2.源码 

// 使用 Matches(String, String) 方法标识以“es”结尾的句子中的任何单词。
// 使用 Matches(String) 方法标识以“es”结尾的句子中的任何单词。
using System.Text.RegularExpressions;namespace _084_4
{public class Example{/// <summary>/// Matches(sentence, pattern)是静态方法/// Matches(sentence)不支持静态方法/// </summary>public static void Main(){string pattern = @"\b\w+es\b";string sentence = "Who writes these notes?";foreach (Match match in Regex.Matches(sentence, pattern).Cast<Match>())Console.WriteLine("Found '{0}' at position {1}",match.Value, match.Index);Console.WriteLine("****************************");Regex regex = new(pattern);foreach (Match match in regex.Matches(sentence).Cast<Match>())Console.WriteLine("Found '{0}' at position {1}",match.Value, match.Index);}}
}
// 运行结果:
/*
Found 'writes' at position 4
Found 'notes' at position 17
****************************
Found 'writes' at position 4
Found 'notes' at position 17*/

这篇关于C#用正则表达式Regex.Matches 方法检查字符串中重复出现的词的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/670216

相关文章

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2