python--(常用模块-3-正则表达式)
Posted 孔辉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python--(常用模块-3-正则表达式)相关的知识,希望对你有一定的参考价值。
python--(常用模块-3-正则表达式)
正则表达式是对字符串操作的?种逻辑公式. 我们?般使?正则表达式对字符串进?匹
配和过滤. 使?正则的优缺点:
优点: 灵活, 功能性强, 逻辑性强.
缺点: 上手难. 一旦上手, 会爱上这个东西
工具: 各文本编辑器一般都有正则匹配功能. 我们也可以去
http://tool.chinaz.com/regex/进?在线测试
正则表达式由普通字符和元字符组成. 普通字符包含大小写字母, 数字. 在匹配普通字符
的时候我们直接写就可以了. 比如"abc" 匹配的就是"abc". 我们如果用python也可以实现相
同的效果. 所以普通字符没什么好说的. 重点在元字符上.
元字符: 元字符才是正则表达式的灵魂. 元字符中的内容太多了, 在这里我们只介绍一些
常用的..
1.字符组
字符组很简单用[]括起来,在[]中出现的内容会被匹配.例如;[abc]匹配a或b或c
如果字符组中的内容过多还可以使?- , 例如: [a-z] 匹配a到z之间的所有字? [0-9]
匹配所有阿拉伯数字
思考: [a-zA-Z0-9]匹配的是什么?
2. 简单元字符
基本的元字符. 这个东西网上一大堆,下面是几个常用的
1 . 匹配除换行符以外的任意字符 2 w 匹配字母或数字或下划线 3 s 匹配任意的空白字符 4 d 匹配数字 5 匹配一个换行符 6 匹配一个制表符 7 匹配一个单词的结尾 8 ^ 匹配字符串的开始 9 $ 匹配字符串的结束 10 W 匹配非字母或数字或下划线 11 D 匹配非数字 12 S 匹配非空字符 13 a|b 匹配字符a或字符b 14 () 匹配括号内的表达式,也表示一个组 15 [...] 匹配字符组中的字符 16 [^...] 匹配除了字符组中字符的所有字符
3.量词
我们到目前匹配的所有内容都是单一的文字符号,那如何一次性匹配很多个字符呢,
我们用到量词
1 * 重复零次或更多次 2 + 重复一次或更多次 3 ? 重复零次或一次 4 {n} 重复n次 5 {n,} 重复n次或更多次 6 {nm} 重复n到m次
4.惰性匹配和贪婪匹配
在量词中的*, +,{} 都属于贪婪匹配. 就是尽可能多的匹配到结果
1 str: 麻花藤昨天让英雄联盟关服了 2 3 reg: 麻花藤.* 4 5 此时匹配的是整句话
在使用.*后面如果加了?则是尽可能的少匹配.表示惰性匹配
1 str: 麻花藤昨天让英雄联盟关服了 2 reg: 麻花藤.*? 3 此时匹配的是 麻花藤 4 str: <div>胡辣汤</div> 5 reg: <.*> 6 结果: <div>胡辣汤</div> 7 str: <div>胡辣汤</div> 8 reg: <.*?> 9 结果 10 <div> 11 </div> 12 str: <div>胡辣汤</div> 13 reg: <(div|/div*)?> 14 结果: 15 <div> 16 </div>
..*?x的特殊含义 找到下一个x为止.
1 str: abcdefgxhijklmn 2 reg: .*?x 3 结果:abcdefgx
5.分组
在正则中使?()进?分组. 比如. 我们要匹配?个相对复杂的?份证号. ?份证号分
成两种. 老的?份证号有15位. 新的?份证号有18位. 并且新的?份证号结尾有可能
1 给出以下正则 2 ^[1-9]d{13,16}[0-9x]$ 3 4 ^[1-9]d{14}(d{2}[0-9x])?$ 5 6 7 ^([1-9]d{16}[0-9x]|[1-9]d{14})$
6.转义
在正则表达式中, 有很多有特殊意义的是元字符, ?如
和s等,如果要在正则中匹
配正常的"
"?不是"换?符"就需要对""进?转义, 变成‘\‘.在python中, ?论是正则表达式, 还
是待匹配的内容, 都是以字符串的形式出现的, 在字符串中也有特殊的含义, 本身还需要转
义. 所以如果匹配一次"
", 字符串中要写成‘\n‘, 那么正则?就要写成"\\n",这样就太麻烦了.
这个时候我们就?到了r‘
‘这个概念, 此时的正则是r‘\n‘就可以了
练习:
1. 匹配邮箱
2. 匹配手机号
3. 匹配生日.日期格式(yyyy-MM-dd)
4. 匹配电话号码
5. 匹配IP
以上是关于python--(常用模块-3-正则表达式)的主要内容,如果未能解决你的问题,请参考以下文章