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_]’
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薪薪代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值