你的位置:首页 > 软件开发 > ASP.net > C# 正则表达式

C# 正则表达式

发布时间:2015-05-21 00:00:30
最近写爬虫时需要用到正则表达式,有段时间没有使用正则表达式现在渐渐感觉有些淡忘,现在使用还需要去查询一些资料。为了避免以后这样的情况,在此记录下正则表达式的一些基本使用方法附带小的实例。让以后在使用时能一目了然知道他的使用,为开发节约时间,同时也分享给大家。正则元字符  在说正则 ...

  最近写爬虫时需要用到正则表达式,有段时间没有使用正则表达式现在渐渐感觉有些淡忘,现在使用还需要去查询一些资料。为了避免以后这样的情况,在此记录下正则表达式的一些基本使用方法附带小的实例。让以后在使用时能一目了然知道他的使用,为开发节约时间,同时也分享给大家。

正则字符

  在说正则表达式之前我们先来看看通配符,我想通配符大家都用过。通配符主要有星号(*)和问号(?),用来模糊搜索文件。get='_blank'>winodws中我们常会使用搜索来查找一些文件。如:*.jpg,XXX.docx的方式,来快速查找文件。其实正则表达式和我们通配符很相似也是通过特定的字符匹配我们所要查询的内容信息。已下代码都是区分大小写。

常用元字符

代码说明
.                     匹配除换行符以外的任意字符。
\w匹配字母或数字或下划线或汉字。
\s 匹配任意的空白符。
\d匹配数字。
\b匹配单词的开始或结束。
[ck]匹配包含括号内元素的字符
^匹配行的开始。
匹配行的结束。
\对下一个字符转义。比如$是个特殊的字符。要匹配$的话就得用\$
|分支条件,如:x|y匹配 x 或 y。

反义元字符

代码说明
\W             匹配任意不是字母,数字,下划线,汉字的字符。
\S匹配任意不是空白符的字符。等价于 [^ \f\n\r\t\v]。
\D匹配任意非数字的字符。等价于 [^0-9]。
\B匹配不是单词开头或结束的位置。
[^CK] 匹配除了CK以外的任意字符。

特殊元字符

代码说明
\f            匹配一个换页符。等价于 \x0c 和 \cL。
\n匹配一个换行符。等价于 \x0a 和 \cJ。
\r匹配一个回车符。等价于 \x0d 和 \cM。
\t匹配一个制表符。等价于 \x09 和 \cI。
\v匹配一个垂直制表符。等价于 \x0b 和 \cK。

限定符

代码说明
*                      匹配前面的子表达式零次或多次。
+匹配前面的子表达式一次或多次。
?匹配前面的子表达式零次或一次。
{n}n 是一个非负整数。匹配确定的 n 次。
{n,}n 是一个非负整数。至少匹配n 次。
{n,m}m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。

懒惰限定符

代码说明
*?                                                 

重复任意次,但尽可能少重复。

如 "acbacb"  正则  "a.*?b" 只会取到第一个"acb" 原本可以全部取到但加了限定符后,只会匹配尽可能少的字符 ,而"acbacb"最少字符的结果就是"acb" 。

+?重复1次或更多次,但尽可能少重复。与上面一样,只是至少要重复1次。
??

重复0次或1次,但尽可能少重复。

如 "aaacb" 正则 "a.??b" 只会取到最后的三个字符"acb"。

{n,m}?

重复n到m次,但尽可能少重复。

如 "aaaaaaaa"  正则 "a{0,m}" 因为最少是0次所以取到结果为空。

{n,}?

重复n次以上,但尽可能少重复。

如 "aaaaaaa"  正则 "a{1,}" 最少是1次所以取到结果为 "a"。

捕获分组

代码说明
(exp)                                                 匹配exp,并捕获文本到自动命名的组里。
(?<name>exp)匹配exp,并捕获文本到名称为name的组里。
(?:exp)匹配exp,不捕获匹配的文本,也不给此分组分配组号以下为零宽断言。
(?=exp)

匹配exp前面的位置。

如 "How are you doing" 正则"(?<txt>.+(?=ing))" 这里取ing前所有的字符,并定义了一个捕获分组名字为 "txt" 而"txt"这个组里的值为"How are you do";

(?<=exp)

匹配exp后面的位置。

如 "How are you doing" 正则"(?<txt>(?<=How).+)" 这里取"How"之后所有的字符,并定义了一个捕获分组名字为 "txt" 而"txt"这个组里的值为" are you doing";

(?!exp)

匹配后面跟的不是exp的位置。

如 "123abc" 正则 "\d{3}(?!\d)"匹配3位数字后非数字的结果

(?<!exp)

匹配前面不是exp的位置。

如 "abc123 " 正则 "(?<![0-9])123" 匹配"123"前面是非数字的结果也可写成"(?!<\d)123"

得到上面秘籍后我们可以小试牛刀...

小试牛刀

在C#中使用正则表达式主要是通过Regex类来实现。命名空间:using System.Text.RegularExpressions。

其中常用方法

名称说明
IsMatch(String, String)指示 Regex 构造函数中指定的正则表达式在指定的输入字符串中是否找到了匹配项。
Match(String, String)在指定的输入字符串中搜索 Regex 构造函数中指定的正则表达式的第一个匹配项。
Matches(String, String)在指定的输入字符串中搜索正则表达式的所有匹配项。
Replace(String, String)在指定的输入字符串内,使用指定的替换字符串替换与某个正则表达式模式匹配的所有字符串。
Split(String, String)在由 Regex 构造函数指定的正则表达式模式所定义的位置,拆分指定的输入字符串。

 

在使用正则表达式前我们先来看看“@”符号的使用。

学过C#的人都知道C# 中字符串常量可以以@ 开头声名,这样的优点是转义序列“不”被处理,按“原样”输出,即我们不需要对转义字符加上 \ (反斜扛),就可以轻松coding。如:

string filePath = @"c:\Docs\Source\CK.txt" // rather than "c:\\Docs\\Source\\CK.txt"

原标题:C# 正则表达式

关键词:C#

C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录