好久不用的正则表达式

今天遇到一个抓取html手机号的需求,以前一直用的HtmlAgilityPack这个组件包,现在看来用这个有点吃力了

于是果断选择用正则表达式,用regextest测试了下发觉好似很久不用都忘的有点差不多了

<div><li class="xxx">

<font class="xx">手机号码</font>
<span class="xxxx"> 130*****602 </span>
</li></div>

通过这么一段解析这个号码130*****602,

用htmlAgilityPack 能拿到单个document节点,但是节点需要类似js里面的 getelementbyid,需要html标签上有id这个属性

这样一来又取不到了

第二种方式:

通过    var phoneText = firstHtmldoc.DocumentNode.SelectNodes("//html[1]//body[1]//span[@class='xxxx'][0]")[0].InnerText;

来截取,但是有一点那一天 这个html排版变化了这里又不管用了

so

正则上吧

号码的规则先理出来 为  数字(3个)+*符号5个+数字3个

而这里*为正则里面的表达式符号,所以用的时候一定要\转义

限定个数{3}

\d{3}\*{5}\d{3}

 

附正则说明

C#正则表达式符号模式

 

字  符

描  述

\

转义字符,将一个具有特殊功能的字符转义为一个普通字符,或反过来

^

匹配输入字符串的开始位置

$

匹配输入字符串的结束位置

*

匹配前面的零次或多次的子表达式

+

匹配前面的一次或多次的子表达式

?

匹配前面的零次或一次的子表达式

{n}

n是一个非负整数,匹配前面的n次子表达式

{n,}

n是一个非负整数,至少匹配前面的n次子表达式

{n,m}

m和n均为非负整数,其中n<=m,最少匹配n次且最多匹配m次

?

当该字符紧跟在其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式尽可能少的匹配所搜索的字符串

.

匹配除“\n”之外的任何单个字符

(pattern)

匹配pattern并获取这一匹配

(?:pattern)

匹配pattern但不获取匹配结果

(?=pattern)

正向预查,在任何匹配pattern的字符串开始处匹配查找字符串

(?!pattern)

负向预查,在任何不匹配pattern的字符串开始处匹配查找字符串

x|y

匹配x或y。例如,‘z|food’能匹配“z”或“food”。‘(z|f)ood’则匹配“zood”或“food”

[xyz]

字符集合。匹配所包含的任意一个字符。例如,‘[abc]’可以匹配“plain”中的‘a’

[^xyz]

负值字符集合。匹配未包含的任意字符。例如,‘[^abc]’可以匹配“plain”中的‘p’

[a-z]

匹配指定范围内的任意字符。例如,‘[a-z]’可以匹配'a'到'z'范围内的任意小写字母字符

[^a-z]

匹配不在指定范围内的任意字符。例如,‘[^a-z]’可以匹配不在‘a’~‘z’'内的任意字符

\b

匹配一个单词边界,指单词和空格间的位置

\B

匹配非单词边界

\d

匹配一个数字字符,等价于[0-9]

\D

匹配一个非数字字符,等价于[^0-9]

\f

匹配一个换页符

\n

匹配一个换行符

\r

匹配一个回车符

\s

匹配任何空白字符,包括空格、制表符、换页符等

 

\S

匹配任何非空白字符

\t

匹配一个制表符

\v

匹配一个垂直制表符。等价于\x0b和\cK

\w

匹配包括下划线的任何单词字符。等价于‘'[A-Za-z0-9_]’

\W

匹配任何非单词字符。等价于‘[^A-Za-z0-9_]’

 

说明:

由于在正则表达式中“ \ ”、“ ? ”、“ * ”、“ ^ ”、“ $ ”、“ + ”、“(”、“)”、“ | ”、“ { ”、“ [ ”等字符已经具有一定特殊意义,如果需要用它们的原始意义,则应该对它进行转义,例如希 望在字符串中至少有一个“ \ ”,那么正则表达式应该这么写: \\+ 。

 

posted @ 2016-04-27 13:05  yuan.net  阅读(259)  评论(0编辑  收藏  举报