当前位置: 首页 > 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_]’
http://www.lryc.cn/news/8824.html

相关文章:

  • 矩阵理论复习(十二)
  • 大数据框架之Hadoop:HDFS(七)HDFS 2.X新特性
  • Fluent工作目录
  • Learning C++ No.10【STL No.2】
  • 【java 高并发编程之JUC】2w字带你JUC从入门到精通
  • QCon演讲实录(下):多云管理关键能力实现与解析-AppManager
  • 刚刚退出了一个群,关于在要麒麟OS上运行Labview
  • el-uploader 文件上传后,又被修改,无法提交到后端 ERR_UPLOAD_FILE_CHANGED
  • 利用Eigen实现点云体素滤波
  • linux高级命令之多进程的使用
  • CSS 圆角边框 盒子阴影 文字阴影
  • python简单解析打印onnx模型信息
  • UE4 编写着色器以及各种宏的理解
  • 小笔记:Python 使用字符串调用函数
  • 红黑树的原理+实现
  • 用于非线性时间序列预测的稀疏局部线性和邻域嵌入(Matlab代码实现)
  • 使用 Vue3 重构 Vue2 项目
  • Hive学习——单机版Hive的安装
  • uprobe 实战
  • 华为OD机试 - 求最大数字(Python)| 真题+思路+考点+代码+岗位
  • 雨水情测报与大坝安全监测系统
  • 抖音广告投放形式有哪些?新品牌进入抖音怎么建立口碑
  • Beefxss使用教程图文教程(超详细)
  • 【Python学习笔记】35.Python3 CGI编程(2)
  • 博客等级说明
  • STL——容器适配器、deque
  • VBA数组和Excel工作表数据传递
  • PyQt5保姆级入门教程——从安装到使用
  • 1.6 epoll实战使用
  • JDK定时、Spring定时、时间轮定时小结