正则表达式入门
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?)
以上是关于正则表达式入门的主要内容,如果未能解决你的问题,请参考以下文章