正则表达式小结
廖雪峰老师的python教程
正则表达式的功能十分强大,用法也十分的多,在廖雪峰老师的python教程中也只是点到为止,仅做了解作用,更深入还希望查阅工具。
正则表达式也是用字符串表示的,有字符表示字符的方法
\d 匹配一个数字
\w匹配一个数字或字母
. 匹配任何字符
\s匹配一个空格(包括tab)
如 '\w\w\s\d.'可以匹配 'py 3!'
*匹配包括0个的任意个字符
+表示至少1个字符
?表示0或1个字符
{n}表示n个字符
{n-m}表示n-m个字符
例如:\d{3}\-\d{3,8}
\d{3} 代表着可以识别3个字符
\d{3-8} 代表着可以识别3-8个字符
\- 可以转义 \ 字符
所以这段就可以识别'010-123456' 这种字符串
精确的匹配,可以用[]划定范围:
[a-zA-Z\_][0-9a-zA-Z\_]{0, 19} 限定前面一个大小写字母或_ 加上后面一个最长20字符的可以包括大小写字母和_的字符串
A|B 代表A或B
^为行开头 例如^\d为行开头必须为数字
$为行末尾 例如\d$为行末尾必须为数字
使用r转义,可以直接将字符串变为正则表达式字符串
例如r'python'的正则表达式字符串就是'python'
引入正则表达式,可以使用re模块
import re
match() 判断是否匹配,匹配返回一个match对象,不匹配返回none
常用形式
test = '用户输入的字符串'
if re.match(r'正则表达式', test):
print('ok')
else:
print('failed')
正则表达式中使用spilt()切割更加方便
re.split(r'[\s\,\;]+', 'a,b;; c d')
['a', 'b', 'c', 'd']
例如在这中间,就可以按照\s(空格) \,(逗号) ; (分号)切割
正则表达式还可以进行分组操作
m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
m.group(0)
'010-12345'
m.group(1)
'010'
m.group(2)
'12345'
如例,使用^(\d{3})-(\d{3,8})$ 将字符串分为前后两组,前面固定3个字符,后面3-8个字符
其中group(0)固定为原字符串
group(1)与group(2)是前后分割的字符串
正则匹配默认为贪婪匹配,如:
re.match(r'^(\d+)(0*)$', '102300').groups()
('102300', '')
在前面的分组中,规定了数字类型,但没有限定个数,会默认匹配尽量多的数字,所以后面的一组就没有机会匹配
re.match(r'^(\d+?)(0*)$', '102300').groups()
('1023', '00')
在此情况下,使用\d+?令其进行非贪婪匹配(尽可能少的匹配),所以后字符串尽可能的多匹配0,出现了下面的情况。
正则表达式在基于python的爬虫中利用较多,之后需要深度的学习。
770

被折叠的 条评论
为什么被折叠?



