第二十五天 正则表达式

本文介绍了Python中的正则表达式,包括使用场景、正则表达式的组成、常用方法及其应用实例。同时讲解了高阶函数map、reduce、filter和sorted的基本用法。还涉及深拷贝和浅拷贝的概念。
摘要由CSDN通过智能技术生成

正则表达式


正则表达式是对字符串操作的⼀种逻辑公式,就是⽤事先定义好的⼀些特定字符、及这些特定字符的组合,组成⼀个“规则字符串”,这个“规则字符串”⽤来表达对字符串的⼀种过滤逻辑。

  • 需要引⼊内置模块re
  • 缺点:效率低下,能⽤字符串⽅法完成尽量使⽤字符串的⽅法
  • 优点:编码简单

1.为什么使⽤正则表达式


  • 使⽤场景
    • 敏感词过滤
    • ⼿机、邮箱等验证
    • 爬⾍

2.正则表达式的组成


  • 原⼦ 组成正则表达式的最⼩单位,任何字符都可以
原子 含义 原子 含义
\d 0-9中任何⼀个字符 [0-9] \w 0-9a-zA-Z的中任何⼀个字符 [0-9a-zA-Z]
\D ⾮0-9中的任何⼀个字符[^0-9] \W ⾮0-9a-zA-Z_的中任何⼀个字符[^0-9a-zA_Z]
\s \n\r\t 空格 . 代表除\n之外的任何字符
\S ⾮\n\r\t 空格中任何⼀个字符[^\n\t\r ] \b 词边界
[] ⾃⼰创建的原⼦表,[0-4]代表0-4中任何⼀个字符 \B ⾮词边界
[^] 排除原⼦表中的字符 \A 字符串开始
^ ⾏⾸;在原⼦表中表示排除 \Z 字符串的结尾
$ ⾏结尾 - 表示域,0-9就表示0到9所有数字字符
[\u4e00-\u9fa5] 匹配纯中⽂
  • 量词 量词能够增强原⼦的描述能⼒
量词 含义 量词 含义
{} 表示重复前⼀个原⼦的次数 * 重复0次或多次{0,}
{m} 表示重复前⼀个原⼦的m次 + ⾄少出现1次{1,}
{m,n} 表示重复前⼀个原⼦的最少m次,最多n次 ? 出现0次或1次{0,1}
{m,} 表示重复前⼀个原⼦的最少m次 *?,+? 取消贪婪
() 改变优先级,取⼦元素 x|y 表示匹配x或者y
  • 模式修正符
修饰符 含义 修饰符 含义
re.S 使.匹配所有字符 re.I 不区分⼤⼩写
re.L 本地化识别 re.M 多⾏匹配
re.U 根据Unicode字符集解析字符,会影响\b、\B、\w、\W

注意:

  • 模式字符串⼀定要使⽤原⽣字符串,也就是⽤r开头的字符串。r’www’
  • 严格区分⼤⼩写
  • 如果正则表达式中有{,},[,],-,?,*,|^,$,.等做普通字符,则要将其转义

3.正则常⽤⽅法


  • re.match()
原型:re.match(pattern,string,flags=0)
功能:从字符串起始位置匹配⼀个模式,如果不是从起始位置匹配则返回None
参数:patter 模式
	string 要匹配的字符串
	flag 模式修正符
返回值: 匹配成功返回⼀个Match object,失败返回None

print(re.match(r'www','www.baidu.com'))
print(re.match(r'www','http:///www.baidu.com')) #None
print(re.match(r'www','cctv.www.baidu.com')) #None
ret = re.search(r'(abc)+', 'xxxabcabcabcdef')
print(ret.group(0)) # abcabcabc 匹配整个表达式
print(ret.group(1)) # abc 第⼀次匹配到的结果
print(ret.span()) # (3, 12) 开始和结束位置
print(ret.groups()) # 表示当正则表达式⾥有多个分组时,多个分组的匹配
结果
  • re.search()
原型:re.search(pattern, string, flags=0)
功能:顺序扫描字符串,找到第.个匹配项结束
参数:patter 模式
	string 要匹配的字符串
	flag 模式修正符
返回值:匹配成功,返回match object,否则返回None

print(re.search(r'll','hello'))
print(re.search(r'll','heLLo',re.I))
  • re.findall()
原型:findall(pattern, string, flags=0)
功能:扫描整个字符串,并返回结果列表
参数:patter: 匹配的正则表达式
	string: 要匹配的字符串
	flags:模式修正符
返回值:如果匹配成功返回⼀个列表,包含了所有匹配项,失败返回空列表
print(re.findall(r'oo','kksdkoosdflsdfooksdfsdoOppppweOo',re.I))
#['oo', 'oo', 'oO', 'Oo']
  • re.split
原型:split(pattern
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值