正则表达式入门

Posted 长城之上是千亿的星空,星空之上是不灭的守望。

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式入门相关的知识,希望对你有一定的参考价值。

正则表达式是什么:

对字符串、文本进行匹配、过滤、搜索、查找的一种方法。

Python正则对象: 字符串

 

应用场景:

1: 规范(规则)匹配: 判断字符串是否符合某种样式, 例如输入是否是电话号码的判断, 字符串是否符合ip规则。   Match  && search

2: 搜索:在字符串中查找是否存在符合样式的子字符串。如大量数据的搜索、查找。Search

3: 输出结果中查找自己想要的子字符串,通过样式来匹配。 findall

 

Python支持的模块:   re  

调用方式:  import  re

 

参考资料:

1) ActivePython26.chm  文档中搜索re

2) 百度中搜索正则表达式30分钟入门教程

 

需要掌握的方法:

re.match、 re.search、 re.findall

(re.sub,  re. compile,  re.split )这三个自学

 

一: re.match函数

函数定义:

re.match 尝试从字符串的起始位置匹配一个模式, 成功返回一个匹配对象,失败的话返回None, 通过group()方法能够获得匹配的对象的内容。

 

1) 如果不是起始位置匹配成功的话,match()就返回none。

2) 通过group()类获得对象内容,

Group() == group(0)

group(1) : 代表匹配到的第一个括号中的内容

3) 函数语法格式:

re.match(pattern, string)

 

函数参数说明:

pattern 匹配的正则表达式样式。

string 要匹配的字符串。

 

作用:

1: 判断匹配规则匹配上没有

2: 能够取到匹配上的内容

 

返回值:

匹配的对象,通过group()来取值

 

举例

#coding:gbk

import re

 

line = "Cats are smarter than dogs"

 

match_obj = re.match( r‘(.*) are (.*?) .*‘, line)

 

if match_obj:

   print "get result : ", match_obj.group()

   print "match第一个括号内匹配的 : ", match_obj.group(1)

   print "match第二个括号内匹配的 : ", match_obj.group(2)

else:

   print "No match!!"

 

分析实例执行结果

 

二: re.search方法

函数定义:

re.search 扫描整个字符串并返回第一个成功的匹配对象,不要求匹配对象一开始就满足匹配条件。

 

re.search(pattern, string)

函数参数说明:

pattern 匹配的正则表达式

string 要匹配的字符串。

 

函数语法:

匹配成功re.search方法返回一个匹配的对象,否则返回None。

 

#coding:gbk

import re

 

line = "Cats are smarter than dogs";

 

search_obj = re.search( r‘(.*) are (.*?) .*‘, line)

 

if search_obj:

   print " search第一个括号内匹配的 : ", search_obj.group()

   print " search第一个括号内匹配的: ", search_obj.group(1)

   print " search第二个括号内匹配的: ", search_obj.group(2)

else:

   print "Nothing found!!"

 

以上实例执行结果分析

 

re.match 和 re.search的区别:

match: 是从头开始匹配,那么一旦匹配不成功,便退出,也就是说整个字符串开始匹配位置到结束,只要一点不满足便返回None

 

search:  也是从头开始匹配,它是层级关系的匹配,是把匹配对象分成一个个子字符串来匹配, 返回第一个匹配成功对象。

 

效率: match快。侧重点不一样。

 

三: re.findall(pattern, string)

函数定义:

re.findall对于搜索对象找到所有满足匹配规则条件的子字符串,并返回一个列表。

1) 返回一个列表,列表中是满足条件的所有的子字符串

2) 直接把内容返回,不是返回一个对象。

 

常用规则样式:

^ 匹配字符串的开头

$ 匹配字符串的末尾。

[...] 用来表示一组字符,单独列出:[amk] 匹配 ‘a‘,‘m‘或‘k‘

.*  匹配所有形式

+ 匹配1个或多个的表达式。

?  匹配0个或1个

{ n,} 精确匹配n个前面表达式。

{ n, m} 匹配 n 到 m 次由前面的正则表达式定义的片段

a| b 匹配a或b  

\w  匹配字母数字

\d  匹配任意数字,等价于 [0-9].

 

举例(练习):

1) 输出  re.findall(‘123\w?‘, ‘123aflds123xfa‘)

re.findall(‘123\w+‘, ‘123aflds123xfa‘)

匹配5-12位的qq号码       [1-9]{1}\d{4,11}

2) 匹配类似:  ‘(010)88886666‘

\(\d{3}\)\d{8}

 

正则表达式实例

匹配 "Python" 或 "python"

匹配 "ruby" 或 "rube"

匹配0-9任何数字。类似于 [0123456789]

匹配任何小写字母

匹配包括下划线的任何单词字符。

 

练习:

1) 匹配手机号码:

2) 匹配ip地址:

((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?) 

 

以上是关于正则表达式入门的主要内容,如果未能解决你的问题,请参考以下文章

Python 正则表达式入门

正则表达式基础入门

正则表达式30分钟入门教程(正则小白的圣经)

Python 正则表达式入门(初级篇)

正则表达式从入门到实战

正则表达式-入门