C# 正则表达式

目录

一、前期准备

二、元字符

三、反义字符

四、重复模式

五、符号应用

六、贪婪与懒惰

七、零宽断言

八、反向引用

九、处理选项

十、平衡组/递归匹配


涉及知识点: 正则表达式、Regex、Match

一、前期准备

        static void Main(string[] args)
        {
            Regex regex = new Regex(@".");
            string input = "a2 N王";

            Match match1 = regex.Match(input);
            while (match1.Success)
            {
                Console.Write( match1.Groups[0].Value + "_" );
                match1 = match1.NextMatch();
            }
        }

二、元字符

  元字符说明单词全拼

.

匹配除换行符以外的任意字符

\w

匹配字母或数字或下划线或汉字word(单词)

\s

匹配任意空白符space(空)

\d

匹配数字digit(数字)

\b

匹配单词的开始或结束begin(开始) break(结束)

^

匹配字符串的开始

$

 匹配字符串的结束

例程:

注: \b 查找字符串中的单词
         ^ $ 查找整个字符串 -- 一般用于验证整个字符串

Regex regex = new Regex(@"\b...\b");
string input = "A1a 89 2  w";
//结果显示:  A1a_ 89_2  _
Regex regex = new Regex(@"\b\w\d\b");
string input = "A1a 89 2  w1 a";
//结果显示: 89_w1_
Regex regex = new Regex(@"\b\s\w\b");
string input = "A1a 89 2  w1 a";
//结果显示:  2_ a_
Regex regex = new Regex(@"^\w\w\w\d\d");
string input = "abc12";
//结果显示:abc12_


三、反义字符

提示:元字符取反 = 反义字符

语法说明
\W匹配任意不是字母, 数字, 下划线, 汉字的字符
\S 匹配任意不是空白符的字符
\D匹配任意非数字的字符
\B匹配不是单词开头或结束的位置
[^x]匹配除了x以外的任意字符
[^aeiou]匹配除了aeiou 这几个字母以外的任意字符

四、重复模式

语法 说明
 *前面一个字符,重复0次或更多
+前面一个字符,重复1次或更多
前面一个字符,可有,可无
{n}前面一个字符,重复n次
{n,}前面一个字符,重复n次或更多
{n,m}前面一个字符,重复n到m次


例程:

Regex regex = new Regex(@"a*b");
string input = "b ab aab cc";
//结果显示:b_ab_aab_
Regex regex = new Regex(@"a+b");
string input = "b ab aab cc";
//结果显示:ab_aab_
Regex regex = new Regex(@"\bab?\b");
string input = "a b ab aab cc";
//结果显示:a_ab_
Regex regex = new Regex(@"\ba{1}b\b");
string input = "a b ab aab aaab cc";
//结果显示:ab_
Regex regex = new Regex(@"\ba{1,}b\b");
string input = "a b ab aab aaab cc";
//结果显示:ab_aab_aaab_
Regex regex = new Regex(@"\ba{1,2}b\b");
string input = "a b ab aab aaab cc";
//结果显示:ab_aab_

五、符号应用

符号说明
[]符合中括号里面的任意字符即可
()将括号里面的字符看着是一个整体
|

或运算

^在中括号中,表示取反
?#xxx注释,内容:xxx

六、贪婪与懒惰

默认:贪婪模式

重复模式 + = 懒惰模式

语法 说明
*?重复0次或更多次,但尽可能少重复
+?重复1次或更多次,但尽可能少重复
??重复0次或1次,但尽可能少重复
{n,m}?重复n到m次, 但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复

例程:

Regex regex = new Regex(@"\w+b");
string input = "ababaab aabab cc";
//结果显示:ababaab_aabab_
Regex regex1 = new Regex(@"\w+?b");
string input1 = "ababaab aabab cc";
//结果显示:ab_ab_aab_aab_ab_

七、零宽断言

语法说明
?= x提取后缀为x的字符,x不提取
?<=x提取以x开头的字符,x不提取
?!x提取 不等于x的字符,x可以为空

例程:

Regex regex = new Regex(@"\w+(?=ing)");
string input = "wsidg qering aing scing cc";
//结果显示:qer_a_sc_
Regex regex = new Regex(@"(?<=q)\w+");
string input = "wsidg qering aing scing cc";
//结果显示:ering_
Regex regex = new Regex(@"q(?!a)\w+");
string input = "wsidg qer qaw qw er q";
//结果显示:qer_qw_

八、反向引用

注:1、重复的单词要相同
        2、前面单词需要用小括号括起来

例程解析
\b(\w+)\b\s+\1\b \1 代表前面的一个单词
\b(?<Word>\w+)\b\s+\k<Word>\b\k<Word> 代指前面一个
Regex regex = new Regex(@"\b(q\w)\b\s+\1\b");
string input = "wsidg qa qa qb qb qr q";
//结果显示:qa qa_qb qb_
Regex regex = new Regex(@"\b(?<key>q\w)\b\s+\k<key>\b");
string input = "wsidg qa qa qb qb qr q";
//结果显示:qa qa_qb qb_

九、处理选项

语法说明
IgnoreCase匹配时不区分大小写
Multiline更改^ 和 $ 的含义, $匹配从结尾改为\n
Singleline更改.的含义, 使他与每一个字符匹配(包括\n)
IgnorePatterWhitespace忽略非转义空白并其余#标记的注释
ExplicitCapture仅捕获已被显式命名的组

十、平衡组/递归匹配

语法说明
(?'group')捕获的内容命名为group,压入堆栈中
(?'-group')弹出最后压入命名为group的内容
(?(group)yes|no)存在继续匹配yes部分,否则匹配no部分

如有错误,烦请批评指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值