(Python)正则表达式(二)

前言

昨天学习了@白月黑羽up主所出的正则表达式视频课程的一部分,计划三天学完,今天是第二天,继续坚持。

学习记录

正则表达式入门依旧是看小甲鱼的文档和白月黑羽up主的视频

贪婪模式和非贪婪模式

题目: 把字符串'<html><head><title>Title</title>'中的html元素提取出来,得到这样一个列表[‘<html>’, ‘<head>’, ‘<title>’, ‘</title>’]

很容易想到使用正则表达式 <.*>,然而运行如下
在这里插入图片描述
原来正则表达式中*+都是贪婪的,使用它们时,会尽可能多的匹配内容,在这个问题中会一直匹配到字符串中的最后一个字符>才会收手,为了解决这个问题,就需要使用非贪婪模式,也就是在*后面加上?,代码实现

source = '<html><head><title>Title</title>'

import re
# 注意多出的问号
p = re.compile(r'<.*?>')
print(p.findall(source))

重要的反斜杠

先引入一个概念

反斜杠后边紧跟一个元字符,那么元字符的“特殊功能”就不会触发,变为普通字符,而在普通字符前加上反斜杠可以使得普通字符拥有特殊能力(例如\d表示匹配任何十进制数字)

上题目

题目:要在下面的文本中搜索所有点前面的字符串,也包含点本身

苹果.是绿色的
橙子.是橙色的
香蕉.是黄色的

在这里插入图片描述
下边列举一些反斜杠加字符构成的特殊含义:

特殊字符
含义
\d
匹配任何十进制数字;相当于类 [0-9]
\D
与 \d 相反,匹配任何非十进制数字的字符;相当于类 [^0-9]
\s
匹配任何空白字符(包含空格、换行符、制表符等);相当于类 [ \t\n\r\f\v]
\S
与 \s 相反,匹配任何非空白字符;相当于类 [^ \t\n\r\f\v]
\w
匹配任何单词字符,见上方解释
\W
于 \w 相反
\b
匹配单词的开始或结束
\B
与 \b 相反

从上述可以归纳出特殊字符记法,d(digital)、s(space)、w(word)、b(begin)
用大小写来互补,从而形成全集

举个实例
在这里插入图片描述
在这里插入图片描述

编译标志

编译标志可以修改正则表达式的工作方式。在re模块下,编译标志均有两个名字:完整名和简名
下边列举一些支持的编译标志:

标志 含义
ASCII, A 使得转义符号如 \w,\b,\s 和 \d 只能匹配 ASCII 字符
DOTALL, S使得 . 匹配任何符号,包括换行符
IGNORECASE, I 匹配的时候不区分大小写
LOCALE, L 支持当前的语言(区域)设置
MULTILINE, M 多行匹配,影响 ^ 和 $
VERBOSE, X (for 'extended') 启用详细的正则表达式

举个实例

题目:从下列文本中提取英文用户名

王亚辉
tony
刘文武

source = '''
		王亚辉
		tony
		刘文武
	'''
import re
p = re.compile(r'\w{2,4}',re.A)
print(p.findall(source))

元字符[]

元字符[]表示要匹配指定的几个字符中的一个或多个

题目:匹配文本中电话号码以15……或者17……开头的

王亚辉,13500344799,89
徐志摩,1b900785634,23
周根源,15909875678,44
周根源,17909875678,44
都云摩,05900785634,23
李根源,23909875678,44

在这里插入图片描述

文本

王亚辉,13500344799,89
徐志摩,1b900785634,23
周根源,15909875678,44
周根源,z7909875678,44
郝云摩,b5900785634,23
李根源,a3909875678,44

在这里插入图片描述
一些元字符在方括号内就会变成普通字符

在这里插入图片描述
如果在方括号中使用^,表示,也就是取补集

在这里插入图片描述

小结

今天的学习任务其实还没有完全完成,但要熄灯了,先洗漱,主要花时间解决微信小程序如何自动化操作及安卓手机单个应用控制音量,路一步步走嘛(我要变赵高),感谢小甲鱼整理的文档和白月黑羽up主做的视频教程,对我学习正则表达式帮助很大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值