正则表达式
2018-08-03 07:36:35来源:博客园 阅读 ()
正则表达式,英文:Regular Expression。它通常用来检索和替换符合某种模式的文本。
Python自1.5版本开始增加了re模块,使得Python拥有了全部的正则表达式功能。
一、基本函数(match、search、findall)
在使用re模块之前,要先引入,re模块使已经在内置在Python内部的,无需再自己下载安装了。
1 import re
1、re.match函数
1.1 原型:match(pattern, string, flags=0)
1.2 参数:
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用来控制正则表达式的匹配方式
re.I:忽略大小写
re.L:做本地化识别
re.M:多行匹配,影响^和$
re.S:使.匹配包括换行符在内的所有字符,否则.不匹配换行符
re.U:根据Unicode字符集解析字符,影响'\w \W \b \B'
re.X:使我们以更灵活的格式理解正则表达式
1.3 功能:尝试从字符串的起始位置匹配一个模式
1.4 eg:
1 # 注释为输出结果
2
3 print(re.match('www', 'www.baidu.com'))
4 # <_sre.SRE_Match object; span=(0, 3), match='www'>
5 # 返回结果的类型、匹配结果的位置、匹配内容
6
7 print(re.match('www', 'www.baidu.com').span())
8 # (0, 3) 输出匹配的位置
2、re.search函数
2.1 原型:search(pattern, string, flags=0)
2.2 参数:
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用来控制正则表达式的匹配方式(与上面内容一致,后面不赘述)
2.3 功能:扫描整个字符串,返回第一个成功的匹配,与match相比,就是不必从起始位置开始匹配
3、re.findall函数
3.1 原型:findall(pattern, string, flags=0)
3.2 参数:
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用来控制正则表达式的匹配方式
3.3 功能:扫描整个字符串,返回结果列表,其中匹配到所有符合模式的结果
二、正则表达式的元字符
1、匹配单个字符
. |
可以匹配除换行符以外的任意字符 |
[] |
是字符集合,表示匹配方括号中任意所包含的任一字符 |
[asd] |
匹配其中任一字符 |
[a-z] |
匹配任意小写字母 |
[0-9a-zA-Z_] |
匹配任意大小写字母或数字或下划线 |
[^asd] |
匹配除了asd几个字母以外的所有字符,中括号里的^号称为'脱字符',表示不匹配集合中的字符 |
[^0-9] |
匹配所有非数字字符 |
\d |
匹配数字,效果同[0-9] |
[^\d] |
匹配非数字字符,效果同[^0-9] |
\w |
匹配数字,字母和下划线,效果同[0-9a-zA-Z_] (字母不包含空格) |
\W |
匹配非数字,字母和下划线,效果同[^0-9a-zA-Z_] |
\s |
匹配任意的空白符(空格,换行,回车,换页,制表),效果同[ \f\n\r\t] |
\S |
匹配任意的非空白符,效果同[^ \f\n\r\t] |
2、锚字符(边界字符)
^ |
行首匹配,和在中括号里的^不是一个意思 |
$ |
行尾匹配 |
\A |
匹配字符串的开始,他和^的区别是,\A只匹配整个字符串的开头,即使在re.M下也不会匹配他行的行首 |
\Z |
匹配字符串的结束,他和$的区别是,\Z只匹配整个字符串的结束,即使在re.M下也不会匹配他行的行尾 |
\b |
匹配一个单词的边界,也就是指单词和空格间的位置 eg:r'er\b',匹配以er为结尾边界的位置 |
\B |
匹配非单词边界,与上面相反,匹配不是边界的 |
3、多个字符
(xyz) |
匹配小括号内的xyz,作为一个整体去匹配 |
x? |
匹配0个或者1个x eg:print(re.findall(r"a?","aaabaa")) # 非贪婪匹配,尽可能少的匹配 |
x* |
匹配0个或者任意多个x eg:print(re.findall(r"a*","aaabaa")) # 贪婪匹配,尽可能多的匹配 |
x+ |
匹配至少一个x(贪婪匹配) |
x{n} |
匹配确定的n个x(n是一个确定的非负整数 |
x{n,} |
匹配至少n个x |
x{n,m} |
匹配至少n个,最多m个x,注意n<=m |
x|y |
|表示或,匹配的是x或y |
4、特殊情况
*? +? x? |
最小匹配,通常都是尽可能多的匹配,可以使用这种解决贪婪匹配 |
(?:X) |
类似于(xyz),但不表示一个组 |
三、实用技巧
1、字符串切割
1 str1 = "hello world hello world hello world "
2 # 普通切割
3 print(str1.split(' ')) # 仅仅以一个空格切割,遇到多个空格时会出现不想要的内容
4 # 正则切割
5 print(re.split(r' +', str1)) # 可以通过正则的切割,其中利用正则的方法,来以任意多个空格来切割
2、re.finditer函数
- 原型:finditer(pattern, string, flags=0)
- 参数:
- pattern:匹配的正则表达式
- string:要匹配的字符串
- flags:标志位,用来控制正则表达式的匹配方式
- 功能:与findall类似,扫描整个字符串,返回的是一个迭代器,可以节省空间,提高效率
1 str2 = "hello world hello world hello world hello world hello world"
2
3 d = re.finditer(r'hello', str2)
4 while True:
5 # 当使用迭代方法时,为了可以使他在找完对象后退出,一般通过捕获的方法
6 try:
7 print(next(d))
8 except StopIteration as e:
9 break
3、字符串的替换和修改
- sub(pattern, repl, string, count=0, flags=0)
- subn(pattern, repl, string, count=0, flags=0)功能: 在目标字符串中以正则表达式的规则匹配字符串,再把他们替换成指定的字符串。可以指定替换的次数,如果不指定,替换所有的匹配字符串
- pattern: 正则表达式(规则)
- repl: 指定的用来替换的字符串
- string: 目标字符串
- count: 最多替换次数
- flags:
- 区别: sub返回一个字符串,subn返回一个元组(第一个元素是替换后的字符串,第二个元素是替换的个数)
4、分组
概念:除了简单的判断是否匹配以外,正则表达式还有提取子串的功能。用()表示的就是提取分组。(这个自己试一下,加深印象)
1 str3 = "010-12312323"
2 m = re.match(r'(?P<first>\d{3})-(\d{8})', str3)
3 # 使用序号获取对应组的信息,group(0)一直代表的原始字符串
4 print(m.group(0))
5 print(m.group(1))
6 print(m.group('first')) # 使用自己起的名字索引
7 print(m.group(2))
8
9 print(m.groups()) # 查看各组的情况
10
11 # 如果在最外层加一个括号,那么group(1)就是打印的最外面的那个,依次向里
12
13 # ?P<first>写在小括号里,表示起名字
5、编译
- 当我们使用正则表达式时,re模块会干两件事:
(1)编译正则表达式,如果正则表达式本身不合法,会报错
(2)用编译后的正则表达式去匹配对象
- 编译的原型:re.compile(pattern, flags=0)
提示:一般情况下,比较简单的匹配我们直接通过上面讲述的那几种基本方法就可以了,但是当模式比较复杂,或者这个正则对象在后面还会用到时,就会先把他编译出来,毕竟后面可以省去再次编译的时间,并且更清晰。
正则对象,习惯上命名为 re_xxxxxx。
1 pat = r"^1(([3578]\d)|(47))\d{8}$" # 模式
2 re_telephone = re.compile(pat) # 编译成正则对象
3 print(re_telephone.match("13612345678")) # 使用其匹配文本,前面提到的基本方法在这里照常使用
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python学习-53 正则表达式 2019-08-13
- python 之 re模块、hashlib模块 2019-07-24
- 正则表达式 2019-06-14
- 中缀表达式转换为后缀表达式(python实现) 2019-06-14
- day14-推导式和生成器表达式 2019-06-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash