C# 正则表达式

正则表达式 是一种匹配输入文本的模式。.Net 框架提供了允许这种匹配的正则表达式引擎。模式由一个或多个字符、运算符和结构组成。

定义正则表达式

下面列出了用于定义正则表达式的各种类别的字符、运算符和结构。

  • 字符转义
  • 字符类
  • 定位点
  • 分组构造
  • 限定符
  • 反向引用构造
  • 备用构造
  • 替换
  • 杂项构造

字符转义

正则表达式中的反斜杠字符(\)指示其后跟的字符是特殊字符,或应按原义解释该字符。

下表列出了转义字符:

转义字符 描述 模式 匹配
\a 与报警 (bell) 符 \u0007 匹配。 \a "Warning!" + '\u0007' 中的 "\u0007"
\b 在字符类中,与退格键 \u0008 匹配。 [\b]{3,} "\b\b\b\b" 中的 "\b\b\b\b"
\t 与制表符 \u0009 匹配。 (\w+)\t "Name\tAddr\t" 中的 "Name\t" 和 "Addr\t"
\r 与回车符 \u000D 匹配。(\r 与换行符 \n 不是等效的。) \r\n(\w+) "\r\Hello\nWorld." 中的 "\r\nHello"
\v 与垂直制表符 \u000B 匹配。 [\v]{2,} "\v\v\v" 中的 "\v\v\v"
\f 与换页符 \u000C 匹配。 [\f]{2,} "\f\f\f" 中的 "\f\f\f"
\n 与换行符 \u000A 匹配。 \r\n(\w+) "\r\Hello\nWorld." 中的 "\r\nHello"
\e 与转义符 \u001B 匹配。 \e "\x001B" 中的 "\x001B"
\ nnn 使用八进制表示形式指定一个字符(nnn 由二到三位数字组成)。 \w\040\w "a bc d" 中的 "a b" 和 "c d"
\x nn 使用十六进制表示形式指定字符(nn 恰好由两位数字组成)。 \w\x20\w "a bc d" 中的 "a b" 和 "c d"
\c X \c x 匹配 X 或 x 指定的 ASCII 控件字符,其中 X 或 x 是控件字符的字母。 \cC "\x0003" 中的 "\x0003" (Ctrl-C)
\u nnnn 使用十六进制表示形式匹配一个 Unicode 字符(由 nnnn 表示的四位数)。 \w\u0020\w "a bc d" 中的 "a b" 和 "c d"
\ 在后面带有不识别的转义字符时,与该字符匹配。 \d+[\+-x\*]\d+\d+[\+-x\*\d+ "(2+2) * 3*9" 中的 "2+2" 和 "3*9"

字符类

字符类与一组字符中的任何一个字符匹配。

下表列出了字符类:

字符类 描述 模式 匹配
[character_group] 匹配 character_group 中的任何单个字符。 默认情况下,匹配区分大小写。 [mn] "mat" 中的 "m","moon" 中的 "m" 和 "n"
[^character_group] 非:与不在 character_group 中的任何单个字符匹配。 默认情况下,character_group 中的字符区分大小写。 [^aei] "avail" 中的 "v" 和 "l"
[ first - last ] 字符范围:与从 first 到 last 的范围中的任何单个字符匹配。 (\w+)\t "Name\tAddr\t" 中的 "Name\t" 和 "Addr\t"
. 通配符:与除 \n 之外的任何单个字符匹配。 
若要匹配原意句点字符(. 或 \u002E),您必须在该字符前面加上转义符 (\.)。
a.e "have" 中的 "ave", "mate" 中的 "ate"
\p{ name } 与 name 指定的 Unicode 通用类别或命名块中的任何单个字符匹配。 \p{Lu} "City Lights" 中的 "C" 和 "L"
\P{ name } 与不在 name 指定的 Unicode 通用类别或命名块中的任何单个字符匹配。 \P{Lu} "City" 中的 "i"、 "t" 和 "y"
\w 与任何单词字符匹配。 \w "Room#1" 中的 "R"、 "o"、 "m" 和 "1"
\W 与任何非单词字符匹配。 \W "Room#1" 中的 "#"
\s 与任何空白字符匹配。 \w\s "ID A1.3" 中的 "D "
\S 与任何非空白字符匹配。 \s\S "int __ctr" 中的 " _"
\d 与任何十进制数字匹配。 \d "4 = IV" 中的 "4"
\D 匹配不是十进制数的任意字符。 \D "4 = IV" 中的 " "、 "="、 " "、 "I" 和 "V"

定位点

定位点或原子零宽度断言会使匹配成功或失败,具体取决于字符串中的当前位置,但它们不会使引擎在字符串中前进或使用字符。

下表列出了定位点:

断言 描述 模式 匹配
^ 匹配必须从字符串或一行的开头开始。 ^\d{3} "567-777-" 中的 "567"
$ 匹配必须出现在字符串的末尾或出现在行或字符串末尾的 \n 之前。 -\d{4}$ "8-12-2012" 中的 "-2012"
\A 匹配必须出现在字符串的开头。 \A\w{3} "Code-007-" 中的 "Code"
\Z 匹配必须出现在字符串的末尾或出现在字符串末尾的\n 之前。 -\d{3}\Z "Bond-901-007" 中的 "-007"
\z 匹配必须出现在字符串的末尾。 -\d{3}\z "-901-333" 中的 "-333"
\G 匹配必须出现在上一个匹配结束的地方。 \\G\(\d\) "(1)(3)(5)[7](9)" 中的 "(1)"、 "(3)" 和 "(5)"
\b 匹配必须出现在 \w(字母数字)和 \W(非字母数字)字符之间的边界上。 \w "Room#1" 中的 "R"、 "o"、 "m" 和 "1"
\B 匹配不得出现在 \b 边界上。 \Bend\w*\b "end sends endure lender" 中的 "ends" 和 "ender"

分组构造

分组构造描述了正则表达式的子表达式,通常用于捕获输入字符串的子字符串。

下表列出了分组构造:

分组构造 描述 模式 匹配
( subexpression ) 捕获匹配的子表达式并将其分配到一个从零开始的序号中。 (\w)\1 "deep" 中的 "ee"
(?< name >subexpression) 将匹配的子表达式捕获到一个命名组中。 (?< double>\w)\k< double> "deep" 中的 "ee"
(?< name1 -name2 >subexpression) 定义平衡组定义。 (((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$ "3+2^((1-3)*(3-1))" 中的 "((1-3)*(3-1))"
(?: subexpression) 定义非捕获组。 Write(?:Line)? "Console.WriteLine()" 中的 "WriteLine"
(?imnsx-imnsx:subexpression) 应用或禁用 subexpression 中指定的选项。 A\d{2}(?i:\w+)\b "A12xl A12XL a12xl" 中的 "A12xl" 和 "A12XL"
(?= subexpression) 零宽度正预测先行断言。 \w+(?=\.) "He is. The dog ran. The sun is out." 中的 "is"、 "ran" 和 "out"
(?! subexpression) 零宽度负预测先行断言。 \b(?!un)\w+\b "unsure sure unity used" 中的 "sure" 和 "used"
(?< =subexpression) 零宽度正回顾后发断言。 (?<=19)\d{2}\b "1851 1999 1950 1905 2003" 中的 "99"、"50"和 "05"
(?< ! subexpression) 零宽度负回顾后发断言。 (?< !19)\d{2}\b "end sends endure lender" 中的 "ends" 和 "ender"
(?> subexpression) 非回溯(也称为"贪婪")子表达式。 [13579](?>A+B+) "1ABB 3ABBC 5AB 5AC" 中的 "1ABB"、 "3ABB" 和 "5AB"

实例

using System;
using System.Text.RegularExpressions; public class Example
{
public static void Main()
{
string input = "1851 1999 1950 1905 2003";
string pattern = @"(?<=19)\d{2}\b"; foreach (Match match in Regex.Matches(input, pattern))
Console.WriteLine(match.Value);
}
}

C# 正则表达式的更多相关文章

  1. JS正则表达式常用总结

    正则表达式的创建 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\\s+) ...

  2. Python高手之路【五】python基础之正则表达式

    下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print( ...

  3. C# 正则表达式大全

    文章导读 正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串.正则表达式无疑是处理文本最有力的工具,而.NET提供的Regex类实现了验证正则表达式的方法.Regex 类表示不可变(只读)的 ...

  4. C#基础篇 - 正则表达式入门

    1.基本概念 正则表达式(Regular Expression)就是用事先定义好的一些特定字符(元字符)或普通字符.及这些字符的组合,组成一个“规则字符串”,这个“规则字符串”用来判断我们给定的字符串 ...

  5. JavaScript正则表达式,你真的知道?

    一.前言 粗浅的编写正则表达式,是造成性能瓶颈的主要原因.如下: var reg1 = /(A+A+)+B/; var reg2 = /AA+B/; 上述两个正则表达式,匹配效果是一样的,但是,效率就 ...

  6. Python 正则表达式入门(中级篇)

    Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...

  7. 【JS基础】正则表达式

    正则表达式的() [] {}有不同的意思. () 是为了提取匹配的字符串.表达式中有几个()就有几个相应的匹配字符串. (\s*)表示连续空格的字符串. []是定义匹配的字符范围.比如 [a-zA-Z ...

  8. JavaScript 正则表达式语法

    定义 JavaScript定义正则表达式有两种方法. 1.RegExp构造函数 var pattern = new RegExp("[bc]at","i"); ...

  9. [jquery]jquery正则表达式验证(手机号、身份证号、中文名称)

    数字判断方法:isNaN()函数 test()方法 判断字符串中是否匹配到正则表达式内容,返回的是boolean值 ( true / false ) // 验证中文名称 function isChin ...

  10. JS中给正则表达式加变量

    前不久同事询问我js里面怎么给正则中添加变量的问题,遂写篇博客记录下.   一.字面量 其实当我们定义一个字符串,一个数组,一个对象等等的时候,我们习惯用字面量来定义,例如: var s = &quo ...

随机推荐

  1. JavaScript定时器的开启关闭

    <html> <head> <meta charset="utf-8"> <title>无标题文档</title> &l ...

  2. 错误:Camera录制视频(6.0错误),5.1正常,7.1正常 (java.lang.RuntimeException: start failed.at android.media.MediaRecorder.native_start(Native Method))

    Process: com.example.mycamera2, PID: 24086 java.lang.RuntimeException: start failed. at android.medi ...

  3. 线性表结构的Java实现

    一.线性表的抽象数据类型表述 线性表的结构简单,长度允许动态增长或搜索:可以对线性表中的任何数据元素进行访问和查找:允许进行数据的插入和删除操作:求线性表中的指定数据的前驱和后继:合并线性表以及拆分线 ...

  4. mysql的模糊查询

    mysql模糊查询like/REGEXP(1)like / not like MySql的like语句中的通配符:百分号.下划线和escape %:表示任意个或多个字符.可匹配任意类型和长度的字符. ...

  5. 如何在vue里面正确的引用 jquery 和 第三方插件

    vue-cli webpack全局引入jquery(jq通过npm安装的并非本地文件) 1.首先在package.json里加入, dependencies:{ "jquery" ...

  6. spring cloud(一) 副 consul

    spring cloud 使用consul作为注册中心 1.安装consul 使用docker安装 查找consul镜像 docker search consul 下载镜像 docker pull c ...

  7. 【JavaScript框架封装】公共框架的封装

    /* * @Author: 我爱科技论坛 * @Time: 20180706 * @Desc: 实现一个类似于JQuery功能的框架 // 公共框架 // 种子模块:命名空间.对象扩展.数组化.类型的 ...

  8. JavaScript正则表达式总结

    同学们,今天给大家带来一篇正则表达式的总结,老规矩,先说下我们为什么要用正则?正则要用在什么地方? (个人理解的,大神轻喷) 正则很多时候要用于字符串操作,比如我们要把一个字符串里面的空格删除啊,替换 ...

  9. P1265 公路修建 (prim)

    题目描述 某国有n个城市,它们互相之间没有公路相通,因此交通十分不便.为解决这一"行路难"的问题,政府决定修建公路.修建公路的任务由各城市共同完成. 修建工程分若干轮完成.在每一轮 ...

  10. python初学者学习笔记

    python开发: a.Python基础 b.网络编程 c.web框架 —用于写网站 d.设计阶段+算法 e.项目阶段 开发: 开发语言:高级语言:python/Java/PHP/C#/Go/ruby ...