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#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Window Server2016加入AD域的方法步骤

《WindowServer2016加入AD域的方法步骤》:本文主要介绍WindowServer2016加入AD域的方法步骤,包括配置DNS、检测ping通、更改计算机域、输入账号密码、重启服务... 目录一、 准备条件二、配置ServerB加入ServerA的AD域(test.ly)三、查看加入AD域后的变

Window Server2016 AD域的创建的方法步骤

《WindowServer2016AD域的创建的方法步骤》本文主要介绍了WindowServer2016AD域的创建的方法步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、准备条件二、在ServerA服务器中常见AD域管理器:三、创建AD域,域地址为“test.ly”

NFS实现多服务器文件的共享的方法步骤

《NFS实现多服务器文件的共享的方法步骤》NFS允许网络中的计算机之间共享资源,客户端可以透明地读写远端NFS服务器上的文件,本文就来介绍一下NFS实现多服务器文件的共享的方法步骤,感兴趣的可以了解一... 目录一、简介二、部署1、准备1、服务端和客户端:安装nfs-utils2、服务端:创建共享目录3、服

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

c# checked和unchecked关键字的使用

《c#checked和unchecked关键字的使用》C#中的checked关键字用于启用整数运算的溢出检查,可以捕获并抛出System.OverflowException异常,而unchecked... 目录在 C# 中,checked 关键字用于启用整数运算的溢出检查。默认情况下,C# 的整数运算不会自

C#实现获得某个枚举的所有名称

《C#实现获得某个枚举的所有名称》这篇文章主要为大家详细介绍了C#如何实现获得某个枚举的所有名称,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... C#中获得某个枚举的所有名称using System;using System.Collections.Generic;usi

C# 读写ini文件操作实现

《C#读写ini文件操作实现》本文主要介绍了C#读写ini文件操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、INI文件结构二、读取INI文件中的数据在C#应用程序中,常将INI文件作为配置文件,用于存储应用程序的

Python中使用defaultdict和Counter的方法

《Python中使用defaultdict和Counter的方法》本文深入探讨了Python中的两个强大工具——defaultdict和Counter,并详细介绍了它们的工作原理、应用场景以及在实际编... 目录引言defaultdict的深入应用什么是defaultdictdefaultdict的工作原理