Python正则表达式使用详情
来源:互联网 发布:mac wps office 编辑:程序博客网 时间:2024/06/11 14:21
工作原理:通过一些特定的字符去匹配你想要的内容,将与设定规则匹配的内容返回,不匹配的内容过滤,即不返回。
匹配字符
- 普通字符
例如: test 与 'test' 匹配
- 元字符
. ^ $ * + ? {} [] \ | ( )
定义正则表达式:
正则名 = r ' 正则内容 '
实例:
rule = r'test'
解释:定义一个名为rule的正则,其功能是匹配test字符串.
下面开始讲解正则表达式的元字符:
[] 字符集:
-常用于匹配某一个字符集:如[a-z]; [A-Z] ; [0-9] ...
-元字符在字符集中不起作用,只相当于普通字符:如[abc$ ] ; [ hello* ]...
-扩展:匹配字符集以外的字符(补集匹配):[^abc]...特点:以^符号开头
实例如下:
#!/usr/bin/python # -*- coding: utf-8 -*- import re r = r'[a-c]test' #制定一个首位字符为'a-c'区间的正则 print re.findall(r,'atest') print re.findall(r,'ctest') print re.findall(r,'dtest')
运行输出:
['atest'] ['ctest'] []可见,以d开头的字符串‘dtest’被过滤掉了。
补集匹配:
补集匹配时需要配合字符集[]来使用,当使用字符集[]时,其内部的首位为^时,表示除了字符集以内的所有内容:
实例如下:
#!/usr/bin/python # -*- coding: utf-8 -*- import re r = r'[^xy]' # 除 x y 以外的字符 print re.findall(r,'x') print re.findall(r,'xy') print re.findall(r,'xyabc') print re.findall(r,'xiyjk')
实例输出:
[] [] ['a', 'b', 'c'] ['i', 'j', 'k']解释:定义补集正则,此时除了 xy以外的内容,其它内容都进行输出,与其位置无关。
^ 匹配行首:
主要用于匹配字符串的头部(开始)的字符,匹配则输出,不匹配则过滤掉。
实例如下:
#!/usr/bin/python # -*- coding: utf-8 -*- import re r = r'^head' # 输出以‘ head ’开始的字符串 print re.findall(r,'head') print re.findall(r,'headfile') print re.findall(r,'heartkkk') print re.findall(r,'heaaaabb')
实例输出:
['head'] ['head'] [] []
匹配头部为head的字符串,有则输出该头部信息,没有则不输出。
$ 匹配行尾:
用于匹配字符串的尾部(末端)的字符,匹配则输出,不匹配则过滤掉。
实例如下:
#!/usr/bin/python#-*- coding: utf-8 -*-importrer= r'end$' # 制定以'end'结尾的字符串printre.findall(r,'end')printre.findall(r,'abcend')printre.findall(r,'iiienn')printre.findall(r,'hello python')
实例输出:
['end'] ['end'] [] []
\ 转义字符:
正则表达式中与其它语言一样使用\进行字符转义,其内部也提供了一些常用的转义字符。
同时可以使用\字符取消所有的元字符,如:\$ , \* ,\+ …...
内部转义字符:
\d:匹配任何十进制数: 相当于字符集 [0-9]
\D:匹配任何非数字字符: 相当于字符集[^0-9]
\s:匹配任何空白字符: 相当于字符集[\t\n\r\f\v]
\S:匹配任何非空白字符: 相当于字符集[^\t\n\r\f\v]
\w:匹配任何字母数字字符:相当于字符集[a-aA-Z0-9]
\W:匹配任何非字母数字字符:相当于字符集[^a-aA-Z0-9]
实例如下:
功能:将元字符 $ 转换为普通字符
#!/usr/bin/python # -*- coding: utf-8 -*- import re r = r'\$abc' # 将'$'元字符转义为普通字符 print re.findall(r,'abc') print re.findall(r,'$abc')
运行输出:
[] ['$abc']
内部提供转义字符实例:
#!/usr/bin/python # -*- coding: utf-8 -*- import re r = r'\dyear' # 用 \d 代替 [0-9] print re.findall(r,'2year') print re.findall(r,'dyear')
运行输出:
['2year'] []
* 匹配0次或以上:
用于指定前一个字符可以被匹配零次或 以上次数,匹配引擎会本着重复尽可能多次数去匹配,一般配合字符集[]使用。
例如:a[xyz]*b
表示:匹配以'a'开始,‘b’结束,中间是'x''y''z'字符中的任意字符、任意组合及任意次数的组合的字符。
实例如下:
#!/usr/bin/python # -*- coding: utf-8 -*- import re r = r'hello*' # 用 * 号制定 o 必须出现 零次或以上 print re.findall(r,'hel') print re.findall(r,'hell') print re.findall(r,'hello') print re.findall(r,'helloo')
运行输出:
[] ['hell'] ['hello'] ['helloo']
+ 匹配1次或以上:
用于指定前一个字符可以被匹配一次或 以上次数,与*字符不一样的就是+字符必须需要指定的字符必须出现一次,而*字符可以是0次。
实例如下:
#!/usr/bin/python # -*- coding: utf-8 -*- import re r = r'hello+' # 用 + 号制定 o 必须出现 一次或以上 print re.findall(r,'hell') print re.findall(r,'hello') print re.findall(r,'helloo')
运行输出:
[] ['hello'] ['helloo']
? 可选匹配:
指定某一字符或区间字符进行匹配一次或零次,即可有可无的状态。
#!/usr/bin/python# -*- coding: utf-8 -*-import rer = r'ab?c' # 指定 b 可有可无print re.findall(r,'ac')print re.findall(r,'abc')print re.findall(r,'abbc')
运行输出:
['ac']['abc'][]
拓展延伸:
贪婪模式和非贪婪模式,贪婪模式为最大匹配,非贪婪模式则为最小匹配!
实例如下:
#!/usr/bin/python# -*- coding: utf-8 -*-import rer = r'ab*' # 贪婪模式(最大匹配)s = r'ab*?' # 非贪婪模式(最小匹配)print re.findall(r,'abbbbbb')print re.findall(s,'abbbbbb')
运行输出:
['abbbbbb']['a']
{m,n} 区间限定符:
表示将某一字符限定在某一区间内,该限定符的规则为至少重复m次,最多重复n次。其中m,n均为整数。
当忽略m时,默认下边界(至少)为0,而忽略n时,默认上边界(至多)为无穷(0~20亿次)。
实例如下:
#!/usr/bin/python# -*- coding: utf-8 -*-import rer = r'ab{2,5}c' # 指定 b 重复次数在 2~5 次之间print re.findall(r,'abc') #重复 1 次print re.findall(r,'abbc') #重复 2 次print re.findall(r,'abbbbbc') #重复 5 次print re.findall(r,'abbbbbbc') #重复 6 次
运行输出:
[]['abbc']['abbbbbc'][]
- Python正则表达式使用详情
- python正则表达式使用
- python使用正则表达式
- python 正则表达式使用
- Python正则表达式使用
- Python正则表达式:如何使用正则表达式
- python基础-正则表达式、python使用正则
- Python中使用正则表达式
- Python正则表达式的使用
- Python中使用正则表达式
- python 正则表达式的使用
- python中使用 正则表达式
- Python中使用正则表达式
- Python 正则表达式使用范例
- Python 使用正则表达式 - 1
- Python 使用正则表达式 - 2
- Python中使用正则表达式
- python正则表达式简单使用
- Python的列表等变量的声明必须要在函数定义与函数调用之前
- wamp环境配置
- atoi及itoa的简略实现
- python:利用smtplib模块发送邮件
- 装饰模式+工厂模式+模板模式
- Python正则表达式使用详情
- TCP/IP详解学习笔记(7)-广播和多播,IGMP协议
- 待研究问题
- Node.js 创建函数 exports和module.exports之间的不同
- TCP/IP详解学习笔记(8)-DNS域名系统
- 正则表达式
- java 实现excel中的数据导入到数据库的功能
- TCP/IP详解学习笔记(9)-TCP协议概述
- 【Guava】PreConditions来校验参数