当前位置: 首页 > news >正文

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

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_]’

相关文章:

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

C#.Net正则表达式学习笔记 在处理字符串时,你会经常有查找符合特定条件的字符串的需求,比如判断一串电话号码是否符合格式、一个邮箱是否符合格式、一个密码是否包含了字母大小写等等。 正则表达式(Regular expressions)用于匹配文本,使用一…...

矩阵理论复习(十二)

已知方阵A的不变因子: 求谱半径求矩阵级数判断矩阵幂级数的收敛性 若矩阵B的某个算子范数小于1,则I-B可逆。 矩阵分析 任何相容矩阵范数都存在与之相容的向量范数。 盖尔圆盘定理一的证明 椭圆范数的证明 若||.||是Cm上的向量范数,A为…...

大数据框架之Hadoop:HDFS(七)HDFS 2.X新特性

7.1集群间数据拷贝 scp实现两个远程主机之间的文件复制 ​ scp -r hello.txt roothadoop103:/root/hello.txt // 推 push ​ scp -r roothadoop103:/root/hello.txt hello.txt // 拉 pull ​ scp -r roothadoop103:/root/hello.txt roothadoop104:/root //是通过本地主机中…...

Fluent工作目录

1 工作目录定义工作目录(working directory)是一种文件存储路径设置方式。基于工作目录的方法,写文件时只需要指定文件名,而不需要指定完全的文件路径,从而简化程序编写,对不同操作系统环境有更好的适应性。…...

Learning C++ No.10【STL No.2】

引言: 北京时间:2023/2/14/23:18,放假两个月,没有锻炼,今天去跑了几圈,一个字,累,感觉人都要原地升天了,所以各位小伙伴,准确的说是各位卷王,一定…...

【java 高并发编程之JUC】2w字带你JUC从入门到精通

点击查看脑图目录地址,实时更新 1 什么是 JUC 1.1 JUC 简介 在 Java 中,线程部分是一个重点,本篇文章说的 JUC 也是关于线程的。JUC 就是 java.util .concurrent 工具包的简称。这是一个处理线程的工具包,JDK 1.5 开始出现的。 1.2 进程与…...

QCon演讲实录(下):多云管理关键能力实现与解析-AppManager

在上篇中,我们已经基本了解了多云管理。现在,我们将深入探讨多云管理关键能力实现:AppManager。 什么是AppManager? 上面我们讲了理论、我们自己使用的交付流程和整体架构,下面我们进入关键能力实现与解析的环节&…...

刚刚退出了一个群,关于在要麒麟OS上运行Labview

年龄过了45,看问题,与以前不太一样了。 觉得浪费时间的事,宁可发呆,也不会参和。 竟然一个群里在讨论如何满足客户的需求:麒麟OS上运行Labview。 然后直接退了群。 这种问题,我觉得可能 发在csdn上&…...

el-uploader 文件上传后,又被修改,无法提交到后端 ERR_UPLOAD_FILE_CHANGED

problem 文件上传后,又被修改,无法提交到后端 具体步骤: 文件上传本地文件打开并修改保存提交ajax 这个问题不仅仅局限于el-uploader,是一个普遍性的问题 导致的问题 问题1:提交请求时,控制台报错 net…...

利用Eigen实现点云体素滤波

目录 前言 一、算法原理 二、代码实现 1.头文件 2.源文件 三、效果展示 前言 体素滤波原理简单,是常用的...

linux高级命令之多进程的使用

多进程的使用学习目标能够使用多进程完成多任务1 导入进程包#导入进程包import multiprocessing2. Process进程类的说明Process([group [, target [, name [, args [, kwargs]]]]])group:指定进程组,目前只能使用Nonetarget:执行的目标任务名…...

CSS 圆角边框 盒子阴影 文字阴影

目录 1.圆角边框(重点) 2.盒子阴影(box-shadow) 3.文字阴影(text-shadow) 1.圆角边框(重点) border-radius 属性用于设置元素的外边框圆角。 语法: border-radius: l…...

python简单解析打印onnx模型信息

当我们加载了一个ONNX之后,我们获得的就是一个ModelProto,它包含了一些版本信息,生产者信息和一个GraphProto。在GraphProto里面又包含了四个repeated数组,它们分别是node(NodeProto类型),input(ValueInfoProto类型)&a…...

UE4 编写着色器以及各种宏的理解

参考链接:如何为 UE4 添加全局着色器(Global Shaders) - Unreal Enginehttps://docs.unrealengine.com/5.1/zh-CN/adding-global-shaders-to-unreal-engine/如何为 UE4 添加全局着色器(Global Shaders) - Unreal Engin…...

小笔记:Python 使用字符串调用函数

小笔记:Python中如何使用字符串调用函数/方法?jcLee95:https://blog.csdn.net/qq_28550263?spm1001.2101.3001.5343 本文地址:https://blog.csdn.net/qq_28550263/article/details/111874476 邮箱 :291148484163.co…...

红黑树的原理+实现

文章目录红黑树定义性质红黑树的插入动态效果演示代码测试红黑树红黑树 定义 红黑树是一个近似平衡的搜索树,关于近似平衡主要体现在最长路径小于最短路径的两倍(我认为这是红黑树核心原则),为了达到这个原则,红黑树所…...

用于非线性时间序列预测的稀疏局部线性和邻域嵌入(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

使用 Vue3 重构 Vue2 项目

目录前言:一、项目整体效果展示二、项目下载使用方法三、为什么要重构项目四、重构的流程五、步骤中的 bug 以及解决方式六、未解决的问题总结:前言: 2020年9月18日,vue3正式版发布了,前几天学习完成后,我决…...

Hive学习——单机版Hive的安装

目录 一、基本概念 (一)什么是Hive (二)优势和特点 (三)Hive元数据管理 二、Hive环境搭建 1.自动安装脚本 2./opt/soft/hive312/conf目录下创建hive配置文件hive-site.xml 3.拷贝一个jar包到hive下面的lib目录下 4.删除hive的guava,拷贝hadoop下的guava 5…...

uprobe 实战

观测数据源 目前按照我的理解,和trace相关的常用数据源–探针 大致分为四类。 内核 Trace point kprobe 用户程序 USDT uprobe 在用户程序中,USDT是所谓的静态Tracepoint。和内核代码中的Trace point类似。实现方式是在代码开发时,使用USDT…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

【kafka】Golang实现分布式Masscan任务调度系统

要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

docker 部署发现spring.profiles.active 问题

报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...