C#.Net正则表达式学习笔记

news2024/11/16 10:54:05

C#.Net正则表达式学习笔记

在处理字符串时,你会经常有查找符合特定条件的字符串的需求,比如判断一串电话号码是否符合格式、一个邮箱是否符合格式、一个密码是否包含了字母大小写等等。

正则表达式(Regular expressions)用于匹配文本,使用一些定义好的匹配元字符,即“规则字符”,然后以它的逻辑去过滤筛选字符串。

需注意,不同环境下的正则表达式规则略有区别,这里的正则表达式是在微软C#下的。

C#正则表达式主要使用Regex类,你可以先做一些初步了解。

在这里插入图片描述
先看这么一个例子:

using System;
using System.Text.RegularExpressions;

class MyProgram
{
    static void Main(string []args)
    {
        string numlist = "333,33,22,65,33";
        string Regular_expressions = @"\b33\b";

        foreach (Match i in Regex.Matches(numlist, Regular_expressions))
            Console.WriteLine(i);
    }
}

整个程序的功能是找出所有为33的字符串并输出。

这里的正则表达式是\b33\b。这是一个非常简单的功能,实际上正则表达式的能力远不止如此,你可以编写出很复杂的式子以完成你想要的功能。

最终的输出是:

33
33

正好有两个33。具体是如何实现的?我们将在下一节中解释部分正则表达式的元字符。
在这里插入图片描述
假设此时我们正在阅读一本英文书,我们希望找到其中所有的in,该怎么做?

这应该是最简单的正则表达式了,直接使用in即可。

事实却不行,因为很多单词都包含了in这两个字符,如inside,include等等,如果这样找的话,这里面的in也会被匹配。

正确的做法应该是\bin\b。

\b,即是正则表达式中规定的一个元字符(metacharacter),代表着一个单词的开头或结尾。两个单词可能会被空格和逗号分隔,但它不匹配这些,它只代表一个位置。

这样,你就可以匹配到一个独立的in。

现在更新一下情景:你仍然在阅读一本英文书,这次你想要找到所有以i开头的单词。怎么做?

答案是\bi\w*\b。

这个正则表达式略微复杂,但也不算难理解。

开头和结尾的两个\b匹配单词边缘,然后是开头字母i,接下来是\w,它可以匹配任意的字母、数字、下划线或者汉字。

后面的*号也是元字符,但它指代数量,在它前面的元字符可以出现任意次以完成匹配。

翻译一下,它的实际含义是先匹配一个字母i,然后经过任意个字符,匹配直到单词结束。

可以理解吧?好,现在情景又被更新了:你要在一群数字中找到一串格式正确的电话号码。

首先你要明白电话号码的格式,很简单,足够11位即可。

答案是:\d\d\d\d\d\d\d\d\d\d\d。

非常简单粗暴,\d也是元字符,匹配一个数字,写满11个即可。

但这样写未免太麻烦,所以这样写也是正确的:\d{11}。这里的11意为前面的元字符必须被匹配11次。

那么,如果你希望匹配到的电话号码要在正确的位置空格,如167 2829 0220,而不是16728290220(这个号码是我瞎编的),该怎么做?

很简单:\d{3}\s\d{4}\s\d{4}。

这里的\s匹配空白,组合起来即可匹配带空格的电话号码。

随着深入学习,你会发现正则表达式会越来越难以理解,越来越复杂。为了避免这个问题 ,你可以在浏览器上寻找一些相关辅助工具,这里不做细述。
在这里插入图片描述

字符描述
\转义字符,将一个具有特殊功能的字符转义为一个普通字符,或反过来
(pattern)匹配 pattern 并获取这一匹配
(?:pattern)匹配 pattern 但不获取匹配结果
(?=pattern)正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串
(?!pattern)负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串
xy
[xyz]字符集合。匹配所包含的任意一个字符。例如,‘[abc]’可以匹配“plain”中的‘a’
[^xyz]负值字符集合。匹配未包含的任意字符。例如,‘[^abc]’可以匹配“plain”中的‘p’
[a-z]匹配指定范围内的任意字符。例如,‘[a-z]’可以匹配’a’到’z’范围内的任意小写字母字符
[^a-z]匹配不在指定范围内的任意字符。例如,‘[^a-z]’可以匹配不在‘a’~‘z’'内的任意字符
\B匹配非单词边界
\D匹配一个非数字字符,等价于 [^0-9]
\f匹配一个换页符
\n匹配一个换行符
\r匹配一个回车符
\S匹配任何非空白字符
\t匹配一个制表符
\v匹配一个垂直制表符。等价于 \x0b 和 \cK
\W匹配任何非单词字符。等价于‘[^A-Za-z0-9_]’

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

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

相关文章

[2023]自动化测试框架完整指南

所有软件在提供给用户之前都必须经过测试。软件测试是开发生命周期中必不可少的一步因为它确保用户必须收到符合其开发目的的高质量产品。每个企业都优先考虑测试;因此,大多数人更愿意从手动测试转向自动化。因此,自动化测试框架是任何软件测试过程的基础…

redis 分布式缓存、主从集群

目录分布式缓存1.Redis持久化1.1.RDB持久化RDB原理1.2.AOF持久化1.3.RDB与AOF对比2.Redis主从2.1.搭建主从架构2.2.主从数据同步原理2.2.1.全量同步2.2.2.增量同步2.2.3.repl_backlog原理2.3.主从同步优化方式2.4.全量同步和增量同步区别3. Redis哨兵3.1 集群监控原理3.2 集群故…

powerjob的worker启动,研究完了这块代码之后我发现了,代码就是现实中我们码农的真实写照

这是一篇让你受益匪浅的文章,代码即使人生。 worker启动比server启动要复杂一些,毕竟worker是要实际干活的,工欲善其事必先利其器,所以需要准备的工具还是不能少的,server对于powerjob来说,只是一个调度用的…

JVM详解

一,JVM 1,JVM区域划分 类装载器,运行时数据区,字节码执行引擎 2,JVM内存模型(运行时数据区) 由本地方法栈,虚拟机栈,堆,方法区,和程序计数器组成。…

C++类基础(十五)

类的继承——虚函数&#xff08;二&#xff09; ● 由虚函数所引入的动态绑定属于运行期行为&#xff0c;与编译期行为有所区别 虚函数与继承紧密相关 – 虚函数的缺省实参只会考虑静态类型 struct Base {virtual void fun(int x 3){std::cout << "virtual void f…

国产技术迎来突破,14nm芯片横空出世,低代码也有好消息

芯片&#xff0c;被称为工业时代的“粮食”&#xff0c;小到手机手环&#xff0c;大到飞机轮船&#xff0c;几乎各个行业都不离开芯片的支持&#xff0c;其重要性不言而喻。而我国在这一领域一直较为薄弱。 一、“芯片之路坎坷” 由于国内半导体芯片市场底子薄弱、没有主动权…

NetApp AFF A 系列全闪存存储阵列

NetApp AFF A 系列全闪存阵列是一款智能、至强、至信的解决方案&#xff0c;它可利用现代云技术为您的 Data Fabric 提供所需的速度、效率和安全性。 是时候实现数据现代化了 进行任何 IT 转型的基础性第一步是利用高性能全闪存存储打造现代化基础架构&#xff0c;提高关键业务…

【C++之容器适配器】反向迭代器的实现

目录前言一、反向迭代器的实现1. 底层2. 成员函数1. 构造函数2. operator*()3. operator->()4. 前置5. 后置6. 前置--7. 后置--8. operator!()9. operator()二、vector反向迭代器的实现1. vector的正向迭代器2. vector反向迭代器的实现3. 测试vector的反向迭代器三、list反向…

git提交

文章目录关于数据库&#xff1a;桌面/vue-admin/vue_shop_api 的 git 输入 打开 phpStudy ->mySQL管理器 导入文件同时输入密码&#xff0c;和文件名 node app.js 错误区&#xff1a; $ git branch // git branch 查看分支 只有一个main分支不见master解决&#xff1a; gi…

PyQt5保姆级入门教程——从安装到使用

目录 Part1&#xff1a;安装PyQt5 Part 2&#xff1a;PyCharm配置PyQt5 Part 3&#xff1a;PyQt5设计界面介绍 Part 4&#xff1a;PyQt5设计UI 今天看了多个大佬的教程&#xff0c;总算是把PyQt5开发弄好了&#xff0c;每个部分都要看几个人的十分不方便&#xff0c;我十分…

YOLOv3简介

YOLOv3 预测部分 Darknet-53 YOLOv3的主干提取网络为Darknet-53&#xff0c;相比于YOLOv2时期的Darknet-19&#xff0c;其加深了网络层数且引入了Residual残差结构。其通过不断的1X1卷积和3X3卷积以及残差边的叠加&#xff0c;大幅度的加深了网络。残差网络的特点是容易优化&a…

【Unity VR开发】结合VRTK4.0:将浮点数从交互器传递到可交互对象

语录&#xff1a; 愿你熬得过万丈孤独&#xff0c;藏得下星辰大海。 前言&#xff1a; 默认情况下&#xff0c;交互器只能将单个布尔操作传递给可交互对象&#xff0c;后者控制可交互对象上的抓取操作。在其他时候&#xff0c;交互器中的其他操作可能希望传递给可交互对象&…

leaflet 设置marker,并可以任意拖动每一个marker(071)

第071个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中通过L.marker来添加marker,通过设置其属性,可以让marker在地图上任意的拖动。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共76行)相关API参…

实体店店铺管理软件怎么挑?看了排名就知道!

很多实体店店主在选择店铺管理软件时,不知道怎么选择,其实这个不难。一般根据市场上的排名也选择就ok了&#xff0c;因为一款被大家都认证过好用的软件&#xff0c;怎么都比盲选的或者名不见经传的软件好。选择一款适合的实体店店铺管理软件可以省很多事。而截止现在管理软件排…

linux将新加磁盘绑挂载到指定目录

查看当前挂载情况df -l此时可以看到sda和sdb两块磁盘已经被挂载&#xff0c;但实际上还有更多块磁盘未被挂载&#xff08;磁盘名称sda&#xff0c;结尾字母安顺递增&#xff09;查看一安装的所有磁盘fdisk -l此时我们可以看到还有很多未进行分区磁盘为磁盘添加分区fdisk /dev/s…

【另辟蹊径】Table 单元格内容过多之省略展示方案,设置Element table的 showOverflowTooltip 属性无效后的替代方案

一、问题背景 设置了element table的组件 <el-table-column>属性showOverflowTooltip无效&#xff0c;如图所示。 PS&#xff1a;注意不是不起作用&#xff0c;是有作用但是内容过多展示占据了整个界面&#xff0c;影响美观和用户体验。 有的博主解决方法是全局样式文件…

一眼万年的 Keychron 无线机械键盘

一眼万年的 Keychron 无线机械键盘 一款好的键盘对于程序员或者喜欢码字的人来说是非常重要的&#xff0c;而最近博主入手了自己的第一款机械键盘——Keychron 无线机械键盘。 机械键盘特点 有独立轴体&#xff0c;通过两个簧接触&#xff0c;来触发信号&#xff0c;价格相对贵…

大文件上传如何做断点续传?

一、是什么 不管怎样简单的需求&#xff0c;在量级达到一定层次时&#xff0c;都会变得异常复杂 文件上传简单&#xff0c;文件变大就复杂 上传大文件时&#xff0c;以下几个变量会影响我们的用户体验 服务器处理数据的能力请求超时 网络波动 上传时间会变长&#xff0c;高…

缓存穿透-总结

目录 缓存穿透-总结 出现场景&#xff1a; 解决方法&#xff1a; 方法1.缓存空对象&#xff1a; 方法2.加一个布隆过滤器&#xff1a; 总结&#xff1a; 缓存穿透-总结 出现场景&#xff1a; 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓…

光量子领域新突破:有望打造芯片工厂!

将2D材料与氮化硅谐振器混合集成&#xff0c;使一系列单光子源与硅基光子按需精准结合。&#xff08;图片来源&#xff1a;网络&#xff09;量子光子学的著名专家、电气和计算机工程助理教授Galan Moody的实验室成功创造了一种在芯片上产生单光子的新方法。量子具有叠加态的特性…