(9)正则表达式和re模块(重点模块)
在我们学习这个模块之前,我们先明确一个关系。模块和实际工作的关系。
1)模块和实际工作时间的关系
1.time模块和时间是什么关系?time模块和时间本身是没有关系的,但是在实际的开发的过程中,我们使用time模块可以使我们更加的方便的操作时间,获取到时间的值。
2.re模块和正则表达式之间的关系
有了re模块就可以在python语言中操作正则表达式了。
就算没有了re模块,我们的正则表达式依然是存在的,只是我们re模块使得我们更好的更加方便的去操作正则表达式。
所有的语言(java c++ js等等)都是有正则的表达式,大部分正则表达式的语法都是相同的。
re模块可以使得我们去更好的操作正则表达式。
先学正则表达式,然后再学在python中怎么去使用和操作正则表达式的。
所以正则表达式是重点。re模块是重点。(这里必须重点掌握,这个阶段一定要挑战,冲刺正则表达式和re模块等等)
2)正则表达式
re模块--regex的缩写 正则表达式
正则表达式(重要性体现在以下几个方面):
自动化运维 --- 实际上也是和开发有关系,开发相应的自动化运维的软件
爬虫 ---- python学习的热门方向
正则表达式在线测试工具:http://tool.chinaz.com/regex
字符组 : [字符组]
在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示
字符分为很多类,比如数字、字母、标点等等。
假如你现在要求一个位置"只能出现一个数字",那么这个位置上的字符只能是0、1、2...9这10个数之一。
正则 |
待匹配字符 |
匹配结果 |
说明 |
[0123456789] |
8 |
True |
在一个字符组里枚举合法的所有字符,字符组里的任意一个字符和"待匹配字符"相同都视为可以匹配 |
[0123456789] |
a |
False |
由于字符组中没有"a"字符,所以不能匹配 |
[0-9] |
7 |
True |
也可以用-表示范围,[0-9]就和[0123456789]是一个意思 |
[a-z] |
s |
True |
同样的如果要匹配所有的小写字母,直接用[a-z]就可以表示 |
[A-Z] |
B |
True |
[A-Z]就表示所有的大写字母 |
[0-9a-fA-F] |
e |
True |
可以匹配数字,大小写形式的a~f,用来验证十六进制字符 |
1.元字符:
元字符 |
匹配内容 |
| . |
匹配除换行符以外的任意字符 |
| \w |
匹配字母或数字或下划线 |
| \s |
匹配任意的空白符(\n \t 空格) |
| \d |
匹配数字(0-9) |
| \n |
匹配一个换行符 |
| \t |
匹配一个制表符 |
| \b |
匹配一个单词的结尾 |
| ^ |
匹配字符串的开始 |
| $ |
匹配字符串的结尾 |
| \W |
匹配非字母或数字或下划线 |
| \D |
匹配非数字 |
| \S |
匹配非空白符 |
| a|b |
匹配字符a或字符b |
| () |
匹配括号内的表达式,也表示一个组,表示一个分组 |
| [...] |
匹配字符组中的字符 |
| [^...] |
匹配除了字符组中字符的所有字符 |
2. 量词:
量词 |
用法说明 |
| * |
重复零次或一次或更多次 |
| + |
重复一次或更多次 |
| ? |
重复零次或一次 |
| {n} |
重复n次 |
| {n,} |
重复n次或更多次 |
| {n,m} |
重复n到m次 |
3. . ^ $
| 正则 |
待匹配字符 |
匹配 结果 |
说明 |
| 海. |
海燕海娇海东 |
海燕海娇海东 |
匹配所有"海."的字符 |
| ^海. |
海燕海娇海东 |
海燕 |
只从开头匹配"海." |
| 海.$ |
海燕海娇海东 |
海东 |
只匹配结尾的"海.$" |
4.* + ? { }
| 正则 |
待匹配字符 |
匹配 结果 |
说明 |
| 李.? |
李杰和李莲英和李二棍子 |
李杰 李莲 李二 |
?表示重复零次或一次,即只匹配"李"后面一个任意字符 |
| 李.* |
李杰和李莲英和李二棍子 |
李杰和李莲英和李二棍子 |
*表示重复零次或多次,即匹配"李"后面0或多个任意字符 |
| 李.+ |
李杰和李莲英和李二棍子 |
李杰和李莲英和李二棍子 |
+表示重复一次或多次,即只匹配"李"后面1个或多个任意字符 |
| 李.{1,2} |
李杰和李莲英和李二棍子 |
李杰和 李莲英 李二棍 |
{1,2}匹配1到2次任意字符 |
注意:前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配
| 正则 |
待匹配字符 |
匹配 结果 |
说明 |
| 李.*? |
李杰和李莲英和李二棍子 |
李 李 李 |
惰性匹配 |
5.字符集[][^]
| 正则 |
待匹配字符 |
匹配 结果 |
说明 |
| 李[杰莲英二棍子]* |
李杰和李莲英和李二棍子 |
李杰 李莲英 李二棍子 |
表示匹配"李"字后面[杰莲英二棍子]的字符任意次 |
| 李[^和]* |
李杰和李莲英和李二棍子 |
李杰 李莲英 李二棍子 |
表示匹配一个不是"和"的字符任意次 |
| [\d] |
456bdha3 |
4 5 6 3 |
表示匹配任意一个数字,匹配到4个结果 |
| [\d]+ |
456bdha3 |
456 3 |
表示匹配任意个数字,匹配到2个结果 |
6.分组 ()与 或 |[^]
身份证号码是一个长度为15或18个字符的字符串,如果是15位则全部