正则表达式基础(1)

目录

一、基础字符匹配

二、常用元字符及功能

三、重复匹配

  1.限定精确次数或限制区间

  2.防止过度匹配

四、常见问题的正则表达式解决方法

一、基础字符匹配

  1.空白元字符                 

元字符 说明
[ \b ] Backspace键
\f 换页符
\n 回车符
\r 换行符
\t Tab键
\v 垂直制表符

 

 

 

 

 

 

 

 

 

\b表示两个字符时,是匹配单词边界,之前遇到过要匹配单词,需要 r'\b加以说明.

回车和换行符感觉功能是一样的,查看一些资料表示有一些解释器会将 \r 自动转换为 \n, 正则表达式\r\n匹配一个“回车换行”组合,windows系统把这个组合用作文本结束标签,Unix和Linux只使用一个换行符结束一个文本行,匹配时候用\n\n即可,不应加上\r.

   2.特定字符匹配

元字符 说明
\d 任何一个数字字符(等价于[0-9])
\D 任何一个非数字字符(等价于[^0-9])
\w 任何一个字母字符或下划线字符(即[a-zA-Z0-9_])
\W 任何一个非字母字符或非下划线字符(即[^a-zA-Z0-9_])
\s 任何一个空白字符
\S 任何一个非空白字符

 

 

 

 

 

 

 

 

 

字母的大小写匹配相反的字符.

  3.匹配十六进制和八进制数值

在正则表达式中,十六进制数值要用前缀\x,如\x0A对应ASCII字符10(换行符),效果等于\n,八进制前缀则是\0,如\011对应ASCII 9(制表符)

二、常用元字符及功能

  1. \字符常用于转义,如上面列举的字符匹配,当文本需要匹配本身\时,用\\

  2. .字符可以匹配任何单个字符、字母、数字,甚至本身

  3. +字符匹配一个或多个字符,放在一个字符或字符集之后,匹配与前面意义相同的字符

  4. *字符匹配0个或多个字符,用法类似'+',只是匹配的前面字符可以不出现

  5. ?字符匹配他前面的字符是否存在,如匹配URL时,有http和https,正则表达式https?

  6. @、-字符用时无须转义

三、重复匹配

  1.限定精确次数或限制区间

  有了上面的字符功能的介绍,重复匹配我们可以用+或*,但是有局限性,不能限制重复次数,所以要给它设定精确的次数,这时用到{},比如要找出网页中RGB值,文本是:

<body bgcolor = "#336655" text = "#FFFFFF">
View Code、

正则表达式:#[0-9a-fA-F]{6}  结果:#336655  #FFFFFF

例子重复匹配为6次,那如果要检查日期的书写格式如:2005/01/01、2006-1-10、19.08.15、18 8 8,最后一个不符合要求,年份至少要两位数,这就需要设定最少和最多重复次数,

正则表达式为:\d{2,4}[\/-\.]\d{1,2}[\/-\.]\d{1,2}   结果最后一个不符合就没有匹配到,检查完成。

  2.防止过度匹配

  虽然我们已经能够限定匹配重复次数,但是还有一种情况,一个网页里面的各种标签不止出现一次,例如要找出<a></a>里面的内容:文本:

<a>网页</a><a>新闻</a><a>贴吧</a><a>知道</a><a>音乐</a><a>图片</a><a>视频</a><a>地图</a><a>文库</a>
View Code

正则表达式:<a>.*</a>  匹配结果是整一串,<a>网页</a><a>新闻</a><a>贴吧</a><a>知道</a><a>音乐</a><a>图片</a><a>视频</a><a>地图</a><a>文库</a>,而我们理想是每个标签都会分开

修改为:<a>.*?</a>   结果显示9个匹配:<a>网页</a>、<a>新闻</a>、<a>贴吧</a>、<a>知道</a>、<a>音乐</a>、<a>图片</a>、<a>视频</a>、<a>地图</a>、<a>文库</a>

  +、*都是“贪婪型”元字符,在匹配行为模式上是多多益善而不是适可而止,所以它的“懒惰性”版本则尽可能短的匹配,式子后加上?

四、常见问题的正则表达式解决方法

  1.URL地址

<a href="https://www.baidu.com/" nslog="normal" nslog-type="10600112" data-href="https://www.baidu.com/s?ie=utf-8&fr=bks0000&wd=">网页</a>
<a href="http://news.baidu.com/" nslog="normal" nslog-type="10600112" data-href="http://news.baidu.com/ns?tn=news&cl=2&rn=20&ct=1&fr=bks0000&ie=utf-8&word=">新闻</a>
<a href="https://tieba.baidu.com/" nslog="normal" nslog-type="10600112" data-href="https://tieba.baidu.com/f?ie=utf-8&fr=bks0000&kw=">贴吧</a>
<a href="https://zhidao.baidu.com/" nslog="normal" nslog-type="10600112" data-href="https://zhidao.baidu.com/search?pn=0&&rn=10&lm=0&fr=bks0000&word=">知道</a>
<a href="http://music.baidu.com/" nslog="normal" nslog-type="10600112" data-href="http://music.baidu.com/search?f=ms&ct=134217728&ie=utf-8&rn=&lm=-1&pn=30&fr=bks0000&key=">音乐</a>
<a href="http://image.baidu.com/" nslog="normal" nslog-type="10600112" data-href="http://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=">图片</a>
<a href="http://v.baidu.com/" nslog="normal" nslog-type="10600112" data-href="https://www.baidu.com/sf/vsearch?pd=video&tn=vsearch&ie=utf-8&rsv_spt=17&wd=">视频</a>
<a href="http://map.baidu.com/" nslog="normal" nslog-type="10600112" data-href="http://map.baidu.com/m?ie=utf-8&fr=bks0000&word=">地图</a>
<a href="https://wenku.baidu.com/" nslog="normal" nslog-type="10600112" data-href="https://wenku.baidu.com/search?lm=0&od=0&ie=utf-8&fr=bks0000&word=">文库</a>
View Code

正则表达式:https?://[\w.]+.com

  2.电子邮件地址

My QQ mail is 12345@qq.com, and another mail is abcde@126.com
View Code

正则表达式:(\w+)*@\w+\.com

   在实际运用正则表达式中,很多需要根据文本特点写出最合适简单的式子,比如爬取网页的目标信息,一个好的正则表达式能帮我们简单地解决问题。

posted @ 2019-08-15 16:31  Charzueus  阅读(658)  评论(0编辑  收藏  举报