廖雪峰python教程学习:正则表达式小结

正则表达式小结

廖雪峰老师的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的爬虫中利用较多,之后需要深度的学习。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值