C#正则表达式的使用

前言

正则表达式是一种用于分析、匹配和处理字符串的特定模式。其丰富的泛模式匹配表示法,可用于查找特定字符、提取、编辑、替换或删除、验证文本等操作。

工作方式

使用正则表达式处理文本的核心是正则表达式引擎,.NET 是由 Regex 类来表示。在使用正则表达式时,需要向正则表达式引擎提供正则表达式模式分析的文本

Regex 类

Regex 类常用方法
方法描述
IsMatch指示正则表达式在输入字符串中是否找到匹配项。
Matche检索匹配正则表达式模式的一个文本匹配项。
Matches检索匹配正则表达式模式的所有文本匹配项。
Replace替换匹配正则表达式模式的文本。
Split指定的正则表达式模式定义的位置进行分割字符串。
Regex 类应用示例

1、字符串匹配,实现验证文本操作

#region 匹配字符串是否为IP地址
string ip="127.0.0.1";
bool matchResult = Regex.IsMatch(ip, @"^\d{1,3}(\.\d{1,3}){3}$");
if (matchResult)
{
  Console.WriteLine(string.Format("{0}是IP地址",ip));
}
#endregion

#region 匹配字符串中是否包含指定字符
string content = "RTSF-202404050001";
Regex regex = new Regex("rtsf",RegexOptions.IgnoreCase);
if (regex.IsMatch(content))
{
  Console.WriteLine("字符串中包含:RTSF!");
}
#endregion
  
#region 匹配日期合法性
string dateTime = "2024-04-06";
bool matchDateResult = Regex.IsMatch(dateTime, @"^\d{4}\-\d{1,2}\-\d{1,2}$");
if (matchDateResult) 
{
    Console.WriteLine(string.Format("{0}是日期", dateTime));
}
#endregion

2、字符串替换

#region 替换实现手机号码脱敏
//对手机号码脱敏
string pattern = @"(\d{3})\d{4}(\d{4})";
// 替换后的格式
string replacement = "$1****$2";
// 手机号
string phoneNumber = "13600000001";
// 脱敏后
string maskPhoneNumber=Regex.Replace(phoneNumber, pattern, replacement);
Console.WriteLine(string.Format("手机号码是:{0}", dateTime));
#endregion 
  
#region 简单的字符替换
string content = "136*0000*0001";
// 实例方法
Regex regex = new Regex("*", RegexOptions.IgnoreCase);
// 替换
string  replaceResult = regex.Replace(content,"-");
Console.WriteLine(string.Format("原字符{0},替换后{1}", content,replaceResult));
#endregion 

3、字符串拆分

#region 按数字将字符串拆分
string pattern = @"\d+";
Regex regex = new Regex(pattern);
string content = "13Regex46Pattern79Result01";
string[] result = regex.Split(input);
#endregion

4、字符串提取

#region 提取字符字符串中[]范围的的字符
string pattern = @"(?is)(?<=\[)(.*)(?=\])";
Regex regex = new Regex(pattern);
string result = regex.Match("手机号[1360000001]联系").Value;
#endregion

常用正则模式

正则表达式模式是由一系列字符和特殊字符组成,用于描述要匹配的文本模式。设计正则表达式的模式也是使用正则难点,下面给出一常用的模式。

1、校验数字

// 匹配0-9数字
Regex regex = new Regex(@"^[0-9]*$");
// 匹配出现过n次的数字,使用时指定如4
Regex regex = new Regex(@"^\d{n}$");
// 匹配非零的正整数 
Regex regex = new Regex(@"^[1-9]\d*$");                     
// 1或2位小数的正数或负数
Regex regex = new Regex(@"^(\-)?\d+(\.\d{1,2})?$");
// 可以为正数、负数或小数
Regex regex = new Regex(@"^(\-|\+)?\d+(\.\d+)?$");

2、校验字符

//汉字
Regex regex = new Regex(@"^[\u4e00-\u9fa5]{0,}$");
//英文和数字
Regex regex = new Regex(@"^[A-Za-z0-9]+$");
//长度为n,m的所有字符,如3,20
Regex regex = new Regex(@"^.{3,20}$");
//由26个英文字母组成的字符串
Regex regex = new Regex(@"^[A-Za-z]+$");
//由26个大写英文字母组成的字符串
Regex regex = new Regex(@"^[A-Z]+$");
//由26个小写英文字母组成的字符串
Regex regex = new Regex(@"^[a-z]+$");
//由数字和26个英文字母组成的字符串
Regex regex = new Regex(@"^[A-Za-z0-9]+$");
//中文、英文、数字包括下划线
Regex regex = new Regex(@"^[\u4E00-\u9FA5A-Za-z0-9_]+$");

3、常见模式

// 验证电话号码
Regex regex = new Regex(@"^($$\d{3,4}-)|\d{3.4}-)?\d{7,8}$");
// 验证身份证号
Regex regex = new Regex(@"^\d{15}|\d{18}$");
// 中国邮政编码
Regex regex = new Regex(@"[1-9]\d{5}(?!\d)");
// IP地址
Regex regex = new Regex(@"\d+\.\d+\.\d+\.\d+");

小结

正则表达式是一种非常方便和强大的语法,可以用于搜索、匹配和替换字符串。本文介绍希望能对大家有所帮助。后续将对正则表达式模式构成,掌握如设计自己需要的正则表达式的模式。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Sora DiT图解【文生视频】

“在古老的迪萨罗斯大陆&#xff0c;曾经住着一位传奇人物&#xff0c;名叫索拉&#xff08;Sora&#xff09;。这个传奇人物体现了无限潜力的本质&#xff0c;包括天空的浩瀚和壮丽。 当它飞得很高&#xff0c;彩虹色的翅膀横跨广阔的空间&#xff0c;光线从它引人注目的身体…

QTreeView第一列自适应

通过setStretchLastSection(bool stretch)可以设置最后一列自适应,对于QTreeView,stretch默认为true。但有时候我们需要设置第一列自适应,比如文件浏览器,共有名称、大小和修改日期三列,大小和日期的宽度几乎是固定的,但名称却可长可短,此时我们希望在窗口大小变化时,第…

【算法专题--栈】用栈实现队列 -- 高频面试题(图文详解,小白一看就懂!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐双栈 模拟 队列 &#x1f95d;栈 和 队列 的特性 &#x1f34d;具体思路 &#x1f34d;案例图解 四、总结与提炼 五、共勉 一、前言 用栈实现队列 这道题&#xff0c;可以说是--栈专题--&#xff0c;最经典的一道题&…

Python数据分析-股票分析和可视化(深证指数)

一、内容简介 股市指数作为衡量股市整体表现的重要工具&#xff0c;不仅反映了市场的即时状态&#xff0c;也提供了经济健康状况的关键信号。在全球经济体系中&#xff0c;股市指数被广泛用于预测经济活动&#xff0c;评估投资环境&#xff0c;以及制定财政和货币政策。在中国…

【入门】5分钟了解卷积神经网络CNN是什么

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ 目录 一、卷积神经网络的结构1.1.卷积与池化的作用2.2.全连接层的作用 二、卷积神经网络的运算2.1.卷积层的运算2.2.池化的运算2.3.全连接层运算 三、pytorch实现一个CNN例子3.1.模型的搭建3.2.CNN完整训练代码 CNN神…

几种热管的构造

1、超薄热管构造形式 在实际应用中&#xff0c;超薄热管通常定义为厚度小于2.0mm的平板热管。超薄热管很薄&#xff0c;可紧贴电子元件表面散热&#xff0c;故被广泛应用于移动和可携带电子设备&#xff0c;如智能手机、笔记本电脑和智能手表。用于笔记本电脑和平板电脑的超薄…

【机器学习】Python中sklearn中数据基础处理与分析过程

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 1. 简介 ​编辑 1.1 什么是Scikit-learn 介绍Scikit-learn 应用领域 1.2 安装Scikit-learn 安装步骤 必要的依赖 2. 数据处理 2.1 创建示例数据 2.2 数据预处理 处理缺失值 特征编码 特征缩放 3. 数据…

设计者思维丨权限轴

应用背景 数据的本质是为了业务服务&#xff0c;从而达到更高效的工作方式&#xff0c;实现数据对业务的赋能和推动作用。 因此在构建报表时&#xff0c;需要开发者有设计思维&#xff0c;能够考虑多种应用场景&#xff0c;帮助业务解决实际应用中的问题。 例如&#xff0c;在实…

昇思MindSpore学习入门-函数式自动微分

函数式自动微分 神经网络的训练主要使用反向传播算法&#xff0c;模型预测值&#xff08;logits&#xff09;与正确标签&#xff08;label&#xff09;送入损失函数&#xff08;loss function&#xff09;获得loss&#xff0c;然后进行反向传播计算&#xff0c;求得梯度&#…

论文解读:【CVPR2024】DUSt3R: Geometric 3D Vision Made Easy

论文“”https://openaccess.thecvf.com/content/CVPR2024/papers/Wang_DUSt3R_Geometric_3D_Vision_Made_Easy_CVPR_2024_paper.pdf 代码&#xff1a;GitHub - naver/dust3r: DUSt3R: Geometric 3D Vision Made Easy DUSt3R是一种旨在简化几何3D视觉任务的新框架。作者着重于…

Java高级重点知识点-17-异常

文章目录 异常异常处理自定义异常 异常 指的是程序在执行过程中&#xff0c;出现的非正常的情况&#xff0c;最终会导致JVM的非正常停止。Java处 理异常的方式是中断处理。 异常体系 异常的根类是 java.lang.Throwable&#xff0c;&#xff0c;其下有两个子类&#xff1a;ja…

实验4 图像空间滤波

1. 实验目的 ①掌握图像空间滤波的主要原理与方法&#xff1b; ②掌握图像边缘提取的主要原理和方法&#xff1b; ③了解空间滤波在图像处理和机器学习中的应用。 2. 实验内容 ①调用 Matlab / Python OpenCV中的函数&#xff0c;实现均值滤波、高斯滤波、中值滤波等。 ②调…

java基于ssm+jsp 多用户博客个人网站

1管理员功能模块 管理员登录&#xff0c;管理员通过输入用户名、密码等信息进行系统登录&#xff0c;如图1所示。 图1管理员登录界面图 管理员登录进入个人网站可以查看&#xff1b;个人中心、博文类型管理、学生博客管理、学生管理、论坛信息、管理员管理、我的收藏管理、留…

Linux多进程和多线程(一)-进程的概念和创建

进程 进程的概念进程的特点如下进程和程序的区别LINUX进程管理 getpid()getppid() 进程的地址空间虚拟地址和物理地址进程状态管理进程相关命令 ps toppstreekill 进程的创建 并发和并行fork() 父子进程执行不同的任务创建多个进程 进程的退出 exit()和_exit() exit()函数让当…

微短剧市场还能火多久?短剧小程序是否有必要搭建?,现在入场到底晚不晚?

我公司在2019年开始都是做软件开发的&#xff0c;从2022到现在&#xff08;2024&#xff09;特别深有体会&#xff0c;在2022年的时候我公司还是在全部做外包项目&#xff0c;一年大概遇到了10多个咨询短剧领域的软件定制&#xff0c;但是当时我只是以为是一个影视播放的程序&a…

7.优化算法之分治-快排归并

0.分治 分而治之 1.颜色分类 75. 颜色分类 - 力扣&#xff08;LeetCode&#xff09; 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums &#xff0c;原地对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序排列。 我们使用整数…

推动多模态智能模型发展:大型视觉语言模型综合多模态评测基准

随着人工智能技术的飞速发展&#xff0c;大型视觉语言模型&#xff08;LVLMs&#xff09;在多模态应用领域取得了显著进展。然而&#xff0c;现有的多模态评估基准测试在跟踪LVLMs发展方面存在不足。为了填补这一空白&#xff0c;本文介绍了MMT-Bench&#xff0c;这是一个全面的…

Django 模版继承

1&#xff0c;设计母版页 Test/templates/6/base.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><!-- 修正了模板标签的全角字符问题 -->{% block title %}<title>这个是母版页</title>{…

leetCode.93. 复原 IP 地址

leetCode.93. 复原 IP 地址 题目思路&#xff1a; 代码 // 前导零的判断方法&#xff1a;如果第一个数是0&#xff0c;且第二个数还有数据&#xff0c;那就是前导0&#xff0c;要排除的 // 注意跟单个 0 区分开 class Solution { public:vector<string> res;vector<…

Opencv+python模板匹配

我们经常玩匹配图像或者找相似&#xff0c;opencv可以很好实现这个简单的小功能。 模板是被查找目标的图像&#xff0c;查找模板在原始图像中的哪个位置的过程就叫模板匹配。OpenCV提供的matchTemplate()方法就是模板匹配方法&#xff0c;其语法如下&#xff1a; result cv2.…