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

相关文章

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

C#中的Converter的具体应用

《C#中的Converter的具体应用》C#中的Converter提供了一种灵活的类型转换机制,本文详细介绍了Converter的基本概念、使用场景,具有一定的参考价值,感兴趣的可以了解一下... 目录Converter的基本概念1. Converter委托2. 使用场景布尔型转换示例示例1:简单的字符串到

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分