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

news2024/11/28 8:45:30

目录

一、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 11

Found '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 11

Found '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,LINQ
                foreach (var word in from Match match in matches.Cast<Match>()//Cast强制显示转换
                                     let word = match.Groups["word"].Value
                                     select 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

 */

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1425530.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker容器化安装SonarQube9.9

文章目录 1.环境准备1.1 版本信息1.2 系统设置 2.Docker环境安装2.1 卸载旧版本2.2 设置源2.3 安装Docker2.4 设置阿里仓库2.5 启动Docker 3.Docker Compose4.登录4.1 首页4.2 安装插件 5.制作镜像离线安装 1.环境准备 1.1 版本信息 名称版本备注Docker25.0.1当前2024-01-01最…

【设计模式】六大原则详解,每个原则提供代码示例

设计模式六大原则 目录 一、单一职责原则——SRP 1、作用2、基本要点3、举例 二、开放封闭原则——OCP 1、作用2、基本要点3、举例 三、里氏替换原则——LSP 1、作用2、基本要点3、举例 四、依赖倒置原则——DLP 1、作用2、基本要点3、举例 五、迪米特法则——LoD 1、作用2、…

Arcgis10.3安装

所需软件地址 链接&#xff1a;https://pan.baidu.com/s/1aAykUDjkaXjdwFjDvAR83Q?pwdbs2i 提取码&#xff1a;bs2i 1、安装License Manager 点击License Manager.exe&#xff0c;默认下一步。 安装完&#xff0c;点击License Server Administrator&#xff0c;停止服务。…

Java基础 集合(二)List详解

目录 简介 数组与集合的区别如下&#xff1a; 介绍 AbstractList 和 AbstractSequentialList Vector 替代方案 Stack ArrayList LinkedList 前言-与正文无关 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界…

IT行业中最重要的证书

在IT行业&#xff0c;拥有一些含金量较高的证书是职业发展的关键。这些证书不仅可以证明技能水平&#xff0c;还有助于提升在职场上的竞争力。本文将介绍几个IT行业中最重要的证书。 1. Cisco认证 CCNA&#xff08;Cisco Certified Network Associate&#xff09;是Cisco公司新…

ArcGIS学习(二)属性表的基本操作

ArcGIS学习(二)属性表的基本操作 1.查看属性表 ArcGIS是处理空间数据的平台。对于空间数据,大家可以理解成它是由两个部分构成:1.一个是空间形体,也就是点、线、面三种。线又可以分为直线、曲线,面又分为圆形、正方形、不规则形体等;2.另外一个部分是空间形体所附带的…

【深蓝学院】移动机器人运动规划--第3章 基于采样的路径规划--笔记

0. Preliminaries 做规划都是将WS转到C space下进行。 找到可行解和最优解&#xff08;这两个不同&#xff09; 通过增量或者批次地在C-space中采样来增量式地构建树或者图。 不显式地构造 如果把整个规划问题看成一个大的优化问题&#xff0c;那么大问题可以拆分成小问题进行…

09. 异常处理

目录 1、前言 2、常见的异常 3、异常处理try...except...finally 4、异常信息解读 5、raise 6、自定义异常 7、小结 1、前言 在编程中&#xff0c;异常&#xff08;Exception&#xff09;是程序在运行期间检测到的错误或异常状况。当程序执行过程中发生了一些无法继续执…

Monday.com替代工具大盘点:哪个更适合您的团队协作需求?

市场上有许多项目管理软件解决方案&#xff0c;每个都有自己的优点和缺点&#xff0c;根据您的具体需求和要求&#xff0c;市场上有8种可用的项目管理软件可以作为Monday.com的替代工具&#xff0c;分别是&#xff1a;Zoho Projects、Trello、Asana、Wrike、Basecamp、JIRA、Mi…

Hadoop-生产调优(更新中)

第1章 HDFS-核心参数 1.1 NameNode内存生产配置 1&#xff09;NameNode 内存计算 每个文件块大概占用 150 byte&#xff0c;一台服务器 128G 内存为例&#xff0c;能存储多少文件块呢&#xff1f; 128 * 1024 * 1024 * 1024 / 150byte ≈ 9.1 亿G MB KB Byte 2&#xff09…

【Redis】签到点赞和UV统计

Redis签到点赞和UV统计 点赞 点赞功能分析 需求&#xff1a; 同一个用户只能点赞一次&#xff0c;再次点击则取消点赞如果当前用户已经点赞&#xff0c;则点赞按钮高亮显示&#xff08;前端判断字段isLike属性&#xff09; 实现步骤&#xff1a; 利用Redis的set集合判断是…

安科瑞光伏、储能一体化监控及运维解决方案

上海安科瑞电气股份有限公司 胡冠楠 咨询家&#xff1a;“Acrelhgn”&#xff0c;了解更多产品资讯 前言 今年以来&#xff0c;在政策利好推动下光伏、风力发电、电化学储能及抽水蓄能等新能源行业发展迅速&#xff0c;装机容量均大幅度增长&#xff0c;新能源发电已经成为新…

Nicn的刷题日常之带空格直角三角形图案

1.题目描述 描述 KiKi学习了循环&#xff0c;BoBo老师给他出了一系列打印图案的练习&#xff0c;该任务是打印用“*”组成的带空格直角三角形图案。 输入描述&#xff1a; 多组输入&#xff0c;一个整数&#xff08;2~20&#xff09;&#xff0c;表示直角三角形直角边的长度&am…

STM32F407移植OpenHarmony笔记7

继上一篇笔记&#xff0c;成功启动了liteos_m内核&#xff0c;可以创建线程了&#xff0c;也能看到shell控制台了。 今天研究文件系统&#xff0c;让控制台相关文件命令如mkdir和ls能工作。 liteos_m内核支持fatfs和littlefs两个文件系统&#xff0c; fatfs适用于SD卡&#xff…

【Tomcat与网络6】 Tomcat是如何扩展Java线程池的?

目录 1.Java 的线程池 2.Tomcat 的线程池 学习Tomcat的时候&#xff0c;有很多绚丽的技术值得我们学习&#xff0c;但是个人认为Tomcat的线程池扩展是最值得研究的一个部分&#xff0c;线程池的应用太广了&#xff0c;也重要了&#xff0c;Java原生线程池的特征我相信很多人都…

【Redis】一文搞懂redis的所有知识点

目录 1. 什么是Redis&#xff1f;它主要用来什么的&#xff1f; 2.说说Redis的基本数据结构类型 2.1 Redis 的五种基本数据类型​编辑 2.2 Redis 的三种特殊数据类型 3. Redis为什么这么快&#xff1f;​编辑 3.1 基于内存存储实现 3.2 高效的数据结构 3.3 合理的数据编…

Python 中常用图像数据结构

&#xff08;原文&#xff1a;https://blog.iyatt.com/?p13222 &#xff09; 1 测试环境 Python 3.12.1 numpy 1.26.3 opencv-python 4.9.0.80 pillow 10.2.0 matplotlib 3.8.2 注&#xff1a; 基于 2022.1.16 和 2022.4.9 的三篇博文再次验证并重写&#xff0c;原文已删…

嵌入式学习第十五天

内存管理: 1.malloc void *malloc(size_t size); 功能: 申请堆区空间 参数: size:申请堆区空间的大小 返回值: 返回获得的空间的首地址 失败返回NULL 2.free void free(void *ptr); 功能: 释放堆区空间 注…

复刻桌面小电视【包含代码分析】

宗旨&#xff1a;开源、分享、学习、进步&#xff0c;生命不息&#xff0c;折腾不止。 复刻小电视 感谢各位大佬的开源项目&#xff0c;让我有了学习的机会&#xff0c;如果侵权&#xff0c;请联系我删除。本人能力有限&#xff0c;如果有什么不对的地方&#xff0c;欢迎指正…

Vue3-Composition-API(二)

一、computed函数使用 1.computed 在前面我们讲解过计算属性computed&#xff1a;当我们的某些属性是依赖其他状态时&#xff0c;我们可以使用计算属性来处理 在前面的Options API中&#xff0c;我们是使用computed选项来完成的&#xff1b; 在Composition API中&#xff0c…