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