本文介绍正则表达式在.NET中的基本应用,代码简单粗暴,实例浅显易懂,让你一分钟快速上手正则(大鸟请略过)。

本文为入门文章,很多时候我们只是忘记了语法,这也可作为一个快速查询的参考。 如果想深入学习正则表达式高级功能请参考其他资料

=========首先引入命名空间 using System.Text.RegularExpressions;

//1.查找
static void Test1()
{
Console.WriteLine("=========Match方法匹配第一个===========");
Regex regex = new Regex(@"\d{3}"); //@ 表示不用进行转义 \在.NET中是转义符 此表达式等同于 \\d{3}
Match m = regex.Match("this is an apple 123 456 9999");
Console.WriteLine(m); Console.WriteLine("=========Matches方法匹配所有===========");
MatchCollection matches = regex.Matches("this is an apple 123 456 9999");
foreach(Match match in matches)
{
Console.WriteLine(match);
} Console.WriteLine("=========IsMatch检查匹配是否成功===========");
bool result = regex.IsMatch("this is an apple 123 456 9999");
Console.WriteLine(result);
}

结果:=========

------------------------------------------------------------------------------------------------------------

//2.替换操作
static void Test2()
{
//替换所有匹配项
Regex regex = new Regex("apple");
string result = regex.Replace("this is an apple,apple,apple", "苹果");
Console.Write(result);
}

结果:=========

------------------------------------------------------------------------------------------------------------

 //3.使用委托
static void Test3()
{
string result = Regex.Replace("1 2 3 4 5",@"\d+", new MatchEvaluator(
delegate(Match match) {//匿名方法
return "" + match.Value;
}
),RegexOptions.IgnoreCase|RegexOptions.Singleline);
//最后一个参数匹配模式 可选
Console.WriteLine(result);
}

结果:=========

简单说明一下,Replace方法可以传入一个委托,对匹配结果自定义处理,new MatchEvaluator(delegate),delegate为方法名,Match作为参数传入, 这里使用了匿名方法。

------------------------------------------------------------------------------------------------------------

 //4.$number 使用表达式替换匹配结果中的 number 组  $1表示组1匹配的结果
static void Test4()
{
string result = Regex.Replace("1 2 3 12 13", @"(\d)(\d)", "A$1");
Console.WriteLine(result);
}

上面的正则表达式有两个分组 (\d) 和 (\d) 匹配结果如下图所示

Replace方法第三个参数 A$1 中的$1 表示使用 匹配结果中Group_1 的值 替换 字符串中所有匹配项 所以 A1替换 12 ,A1替换13 结果如下

如果参数换为 abc$2  表示使用匹配结果中 Group_2 的值 替换字符串中所有匹配项 所以 abc2替换 12 ,abc3替换13 结果如下

此处比较绕口,实在不明白请自行敲一下代码。

------------------------------------------------------------------------------------------------------------

//5.${name} 使用表达式替换匹配结果中的 name 组  ${name}表示组名为name匹配的结果 ?<name> 给改组命名为name
static void Test5() {
string result = Regex.Replace("1 2 3 12 13", @"(\d)(?<name>\d)", "A${name}");
Console.WriteLine(result); }
//补充
//$$ $转义符
//$& 替换整个匹配
//$^ 替换匹配前的字符
//$' 替换匹配后的字符
//$+ 替换最后匹配的组
//$_ 替换整个字符串
//(?#这个是注释) 正则内联注释语法 (?#注释)

给分组命名使用  ?<name> 如下图 命名以后Group_2 的组名为:name ,${name} 和上一节的$1类似 一个用编号引用 一个用名字引用

------------------------------------------------------------------------------------------------------------

//6.1分组
static void Test6()
{
string s = "2005-2-21";
Regex reg = new Regex(@"(?<y>\d{4})-(?<m>\d{1,2})-(?<d>\d{1,2})", RegexOptions.Compiled);
Match match = reg.Match(s); int year = int.Parse(match.Groups["y"].Value);
int month = int.Parse(match.Groups["m"].Value);
int day = int.Parse(match.Groups["d"].Value); DateTime time = new DateTime(year, month, day);
Console.WriteLine(time);
Console.ReadLine(); //DateTime.Parse(s);
}

上面的代码可以用 DateTime.Parse(s) 实现,这里为了展示如何给分组命名和取值

=========

//6.2
static void Test7()
{
string s = "2005-2-21";
Regex reg = new Regex(@"(\d{4})-(\d{1,2})-(\d{1,2})", RegexOptions.Compiled);
Match match = reg.Match(s); int year = int.Parse(match.Groups[].Value);
int month = int.Parse(match.Groups[].Value);
int day = int.Parse(match.Groups[].Value); DateTime time = new DateTime(year, month, day);
Console.WriteLine(time);
Console.ReadLine();
}

未命名的分组可以直接用编号取得 Groups[1],Groups[2],Groups[3]

=======

//6.3
static void Test8()
{
string s = "2005-2-21";
Regex reg = new Regex(@"(?<2>\d{4})-(?<1>\d{1,2})-(?<3>\d{1,2})", RegexOptions.Compiled);
Match match = reg.Match(s); int year = int.Parse(match.Groups[].Value);
int month = int.Parse(match.Groups[].Value);
int day = int.Parse(match.Groups[].Value); DateTime time = new DateTime(year, month, day);
Console.WriteLine(time);
Console.ReadLine();
}

Groups[2] 这里的 2代表的是名字 而不是编号

===========================================================================

看到这里相信你对.NET中如何使用正则有了一个基本的认识, Regex类提供了很多静态的方法可以直接调用,很多时候可以不需要实例化。

//全部代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using System.Text.RegularExpressions;
namespace demo
{
class Program
{
static void Main(string[] args)
{
Test6(); Console.ReadLine();
} //1.查找
static void Test1()
{
Console.WriteLine("=========Match方法匹配第一个===========");
Regex regex = new Regex(@"\d{3}"); //@ 表示不用进行转义 \在.NET中是转义符 此表达式等同于 \\d{3}
Match m = regex.Match("this is an apple 123 456 9999");
Console.WriteLine(m); Console.WriteLine("=========Matches方法匹配所有===========");
MatchCollection matches = regex.Matches("this is an apple 123 456 9999");
foreach(Match match in matches)
{
Console.WriteLine(match);
} Console.WriteLine("=========Matches方法匹配所有===========");
bool result = regex.IsMatch("this is an apple 123 456 9999");
Console.WriteLine(result);
} //2.替换操作
static void Test2()
{
//替换所有匹配项
Regex regex = new Regex("apple");
string result = regex.Replace("this is an apple,apple,apple", "苹果");
Console.Write(result);
} //3.使用委托
static void Test3()
{
string result = Regex.Replace("1 2 3 4 5",@"\d+", new MatchEvaluator(
delegate(Match match) {//匿名方法
return "" + match.Value;
}
),RegexOptions.IgnoreCase|RegexOptions.Singleline);
//最后一个参数匹配模式 可选
Console.WriteLine(result);
} //4.$number 使用表达式替换匹配结果中的 number 组 $1表示组1匹配的结果
static void Test4()
{
string result = Regex.Replace("1 2 3 12 13", @"(\d)(\d)", "A$1");
Console.WriteLine(result);
} //5.${name} 使用表达式替换匹配结果中的 name 组 ${name}表示组名为name匹配的结果 ?<name> 给改组命名为name
static void Test5() {
string result = Regex.Replace("1 2 3 12 13", @"(\d)(?<name>\d)", "A${name}");
Console.WriteLine(result); }
//补充
//$$ $转义符
//$& 替换整个匹配
//$^ 替换匹配前的字符
//$' 替换匹配后的字符
//$+ 替换最后匹配的组
//$_ 替换整个字符串
//(?#这个是注释) 正则内联注释语法 (?#注释) //6.1分组
static void Test6()
{
string s = "2005-2-21";
Regex reg = new Regex(@"(?<y>\d{4})-(?<m>\d{1,2})-(?<d>\d{1,2})", RegexOptions.Compiled);
Match match = reg.Match(s); int year = int.Parse(match.Groups["y"].Value);
int month = int.Parse(match.Groups["m"].Value);
int day = int.Parse(match.Groups["d"].Value); DateTime time = new DateTime(year, month, day);
Console.WriteLine(time);
Console.ReadLine(); //DateTime.Parse(s);
} //6.2
static void Test7()
{
string s = "2005-2-21";
Regex reg = new Regex(@"(\d{4})-(\d{1,2})-(\d{1,2})", RegexOptions.Compiled);
Match match = reg.Match(s); int year = int.Parse(match.Groups[].Value);
int month = int.Parse(match.Groups[].Value);
int day = int.Parse(match.Groups[].Value); DateTime time = new DateTime(year, month, day);
Console.WriteLine(time);
Console.ReadLine();
} //6.3
static void Test8()
{
string s = "2005-2-21";
Regex reg = new Regex(@"(?<2>\d{4})-(?<1>\d{1,2})-(?<3>\d{1,2})", RegexOptions.Compiled);
Match match = reg.Match(s); int year = int.Parse(match.Groups[].Value);
int month = int.Parse(match.Groups[].Value);
int day = int.Parse(match.Groups[].Value); DateTime time = new DateTime(year, month, day);
Console.WriteLine(time);
Console.ReadLine();
} }
}

一分钟学会(一):.NET之正则表达式的更多相关文章

  1. 【译】10分钟学会Pandas

    十分钟学会Pandas 这是关于Pandas的简短介绍主要面向新用户.你可以参考Cookbook了解更复杂的使用方法 习惯上,我们这样导入: In [1]: import pandas as pd I ...

  2. 5分钟学会使用Less预编译器

    5分钟学会使用Less预编译器 Less是什么? LESS CSS是一种动态样式语言,属于CSS预处理语言的一种,它使用类似CSS的语法为CSS赋予了动态语言的特性,如变量.继承.运算.函数等,更方便 ...

  3. 【grunt第二弹】30分钟学会使用grunt打包前端代码(02)

    前言 上一篇博客,我们简单的介绍了grunt的使用,一些基础点没能覆盖,我们今天有必要看看一些基础知识 [grunt第一弹]30分钟学会使用grunt打包前端代码 配置任务/grunt.initCon ...

  4. 《量化投资:以MATLAB为工具》连载(2)基础篇-N分钟学会MATLAB(中)

    http://www.matlabsky.com/thread-43937-1-1.html   <量化投资:以MATLAB为工具>连载(3)基础篇-N分钟学会MATLAB(下)     ...

  5. 《量化投资:以MATLAB为工具》连载(1)基础篇-N分钟学会MATLAB(上)

    http://blog.sina.com.cn/s/blog_4cf8aad30102uylf.html <量化投资:以MATLAB为工具>连载(1)基础篇-N分钟学会MATLAB(上) ...

  6. [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)

    [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...

  7. 50分钟学会Laravel 50个小技巧

    50分钟学会Laravel 50个小技巧 时间 2015-12-09 17:13:45  Yuansir-web菜鸟 原文  http://www.yuansir-web.com/2015/12/09 ...

  8. 10分钟学会Linux

    10分钟学会Linux有点夸张,可是能够让一个新手初步熟悉Linux中最重要最主要的知识,本文翻译的英文网页在众多Linux入门学习的资料中还是很不错的. 英文地址:http://freeengine ...

  9. PHP学习过程_Symfony_(3)_整理_十分钟学会Symfony

    这篇文章主要介绍了Symfony学习十分钟入门教程,详细介绍了Symfony的安装配置,项目初始化,建立Bundle,设计实体,添加约束,增删改查等基本操作技巧,需要的朋友可以参考下 (此文章已被多人 ...

  10. 30分钟学会使用Spring Web Services基础开发

    时隔一年终于又推出了一篇30分钟系列,上一篇<30分钟学会反向Ajax>是2016年7月的事情了.时光荏苒,岁月穿梭.虽然一直还在从事Java方面的开发工作,但是私下其实更喜欢使用C++. ...

随机推荐

  1. Ecshop(二次开发) - 后台添加左侧菜单导航

    1.链接地址:修改 admin\includes\inc_menu.php 文件. $modules['17_syn_data']['view_syn']        =    'synchroni ...

  2. linux常用命令 3

    示例定义的 mytest或者test 用户 mygroup 用户组 cat /etc/group 查看组 groupname:x:groupId:其他成员 组名:x(加密):组ID:组成员cat /e ...

  3. Python标准库04 文件管理 (部分os包,shutil包)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在操作系统下,用户可以通过操作系统的命令来管理文件,参考linux文件管理相关命令 ...

  4. gridView自动列宽代码

    gridView1.OptionsView.ColumnAutoWidth = false; for (int I = 0; I < gridView1.Columns.Count; I++) ...

  5. rails4.2.6配置发送邮件

    调试了很久,最后终于可以发送了 1 在config/environments/development.rb文件里配置邮件信息 config.action_mailer.raise_delivery_e ...

  6. Maven pom.xml 配置详解

    http://niuzhenxin.iteye.com/blog/2042102 http://blog.csdn.net/u012562943/article/details/51690744 po ...

  7. [SQL]SQL语言入门级教材_跟我学SQL(六)

    跟我学SQL:(一)数据查询 且不说你是否正在从事编程方面的工作或者不打算学习SQL,可事实上几乎每一位开发者最终都会遭遇它.你多半还用不着负责创建和维持某个,但你怎么着也该知道以下的一些有关的SQL ...

  8. nyoj 102 次方求摸 快速幂

    点击打开链接 次方求模 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 求a的b次方对c取余的值 输入 第一行输入一个整数n表示测试数据的组数(n<100) 每组测 ...

  9. POJ 1542 Atlantis(线段树 面积 并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1542 参考网址:http://blog.csdn.net/sunmenggmail/article/d ...

  10. .NET基础操作回顾_使用ADO.NET操作SqlServer使用的类

    有些工具用的久了或者有新工具出现后,就慢慢的遗忘了很多,它们从熟悉的变成陌生,当然,对于我们来说不是好事吧. 今天回顾一下ADO.NET用到的MS的基础类库,先上代码(标准的SqlServer操作) ...