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

相关文章

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

Java 方法重载Overload常见误区及注意事项

《Java方法重载Overload常见误区及注意事项》Java方法重载允许同一类中同名方法通过参数类型、数量、顺序差异实现功能扩展,提升代码灵活性,核心条件为参数列表不同,不涉及返回类型、访问修饰符... 目录Java 方法重载(Overload)详解一、方法重载的核心条件二、构成方法重载的具体情况三、不构

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

Python中将嵌套列表扁平化的多种实现方法

《Python中将嵌套列表扁平化的多种实现方法》在Python编程中,我们常常会遇到需要将嵌套列表(即列表中包含列表)转换为一个一维的扁平列表的需求,本文将给大家介绍了多种实现这一目标的方法,需要的朋... 目录python中将嵌套列表扁平化的方法技术背景实现步骤1. 使用嵌套列表推导式2. 使用itert

C#读写文本文件的多种方式详解

《C#读写文本文件的多种方式详解》这篇文章主要为大家详细介绍了C#中各种常用的文件读写方式,包括文本文件,二进制文件、CSV文件、JSON文件等,有需要的小伙伴可以参考一下... 目录一、文本文件读写1. 使用 File 类的静态方法2. 使用 StreamReader 和 StreamWriter二、二进

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

Conda与Python venv虚拟环境的区别与使用方法详解

《Conda与Pythonvenv虚拟环境的区别与使用方法详解》随着Python社区的成长,虚拟环境的概念和技术也在不断发展,:本文主要介绍Conda与Pythonvenv虚拟环境的区别与使用... 目录前言一、Conda 与 python venv 的核心区别1. Conda 的特点2. Python v