正则表达式实践练习
通过这些例子的练习,除了可以掌握常用的正则表达式,更能够巩固前面所学知识。
同样一个功能的正则表达式,你可能会搜索到很多写法,具体使用哪个,还是要根据实际需求来定,厘清想要匹配的字符串的规则是解决问题的关键,有了规则,才能写出正则表达式。
1. 匹配中文
目标字符串是
匹配一段中文,this is a book ,非中文部分不要 |
如果指向匹配中文部分,标点符号和其他字符都不要,正则表达式可以写成
[\u4e00-\u9fa5]+ |
最终会匹配到两段中文
匹配一段中文 |
\u4e00 这种写法是unicode,在\u4e00 与 \u9fa5 之间,都是中文字符。
2. 匹配邮箱
先考虑规则,邮箱分为两部分,A@B,A部分是邮箱用户名部分,可以由大小写字母,数字,下划线,中划线构成。
B是域名部分,域名通常都是xxx.xxx的形式,那么根据实际工作中的需要,可以继续细化,域名的前半部分只能由小写字母和数字构成,后半部分只能是com,根据这些规则写出正则表达式
^[a-zA-Z0-9_-]+@[a-z0-9]+.com$ |
可以使用以下邮箱对这个正则表达式进行验证
1. pythonlinks@163.com |
3. 匹配身份证号
以二代身份证为例,身份证号码是18位,最后一位可以是数字,也可以是大写的X,实际使用中为了防止大小写问题,还会加上x是小写的情况,前17位就全部由数字构成
^\d{17}(X|x)$ |
这个正则表达式当然可以用来匹配身份证号,但还有一个更好的写法
^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X|x)$ |
这种写法,就考虑到了身份证的编码规则
- 前6位是地址码, 登记户口时所在地的行政区划代码
- 7到14位是出生年月日
- 15到17位是顺序码,给同年同月同日出生的人编制的顺序码,第17位奇数表示男性,偶数表示女性
- 第18位是校验码
当我们使用程序进行正则匹配时,小括号内的子表达式所匹配的内容可以通过程序返回结果,这样,就可以按照身份证的编码规则对身份证进行分割
import re |
程序输出结果
[('221282', '1986', '08', '22', '877', '1')] |
4. 匹配URL
先来看看常见的url
https://www.baidu.com/ |
:// 之前是协议说明部分,http协议是最常见的协议,此外还有ftp,thunder 协议,比如迅雷经常使用的资源地址都是以 thunder:// 开头的
://后面的部分的构成则比较复杂,除了空格之外,其他的字符都可以
了解了url构成后,我们可以写出匹配url的正则表达式
[a-zA-z]+://[^\s]* |
5. QQ号码
先来看qq号码的规则,目前,qq号码最长可以是11位,最短是5位,首位不能是0,根据这个规则写出正则表达式
[1-9][0-9]{4,10} |
第一位是1到9中的任意一个,后面的数字部分长度可以是4位到10位