【python高级07-正则表达式】

正则表达式(regular expression):也叫作匹配模式,是使用一些特殊符号来查找或匹配或替换字符串文本的一种技术

1.python对正则表达式的使用:re模块

>>> import re
>>> dir(re)
['A', 'ASCII', 'DEBUG', 'DOTALL', 'I', 'IGNORECASE', 'L', 'LOCALE', 'M', 'MULTILINE', 'RegexFlag', 'S', 'Scanner', 'T', 'TEMPLATE', 'U', 'UNICODE', 'VERBOSE', 'X', '_MAXCACHE', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '__version__', '_alphanum_bytes', '_alphanum_str', '_cache', '_compile', '_compile_repl', '_expand', '_locale', '_pattern_type', '_pickle', '_subx', 'compile', 'copyreg', 'enum', 'error', 'escape', 'findall', 'finditer', 'fullmatch', 'functools', 'match', 'purge', 'search', 'split', 'sre_compile', 'sre_parse', 'sub', 'subn', 'template']

2.正则表达式的规范

字 符描述
元字符:\d . \w \s ^ $ []
\d匹配数字(digest)
.匹配任意符号中文也可以,除了\n
\w匹配所有有效符号(大小写字母,数字,下划线,各国的语言符号)
\s匹配空白位(空格,\t)
^以什么开头
$以什么结尾
[]表示列举,括号里的某一个([0123456789],[a-z],[A-Z],[A-Za-z0-9_],[\u4e00-\u9fa5]-汉字)
反义符:\D \W \S [^]
\D匹配非数字
\W匹配非有效符号,也就是特殊符号
\S非空白位
[^]列举反义 注意^[] 和 [^] >>> re.findall(“1[^356789]\d{9}”,“13991039425”) 结果:[]
转义符在Python中\具有转义的含义,如要正常表示一个\,则需要两个\\。建议大家以后在写正则的时候,一定要在正则表达式前面加上r。
>>> re.match("C:\\\\a\\\\b\\\\c","C:\\a\\b\\c")  #\\两次转义,一次字符串,一次正则表达式
<_sre.SRE_Match object; span=(0, 8), match='C:\\a\\b\\c'>
>>> re.match(r"C:\\a\\b\\c","C:\\a\\b\\c")
<_sre.SRE_Match object; span=(0, 8), match='C:\\a\\b\\c'>
结论:建议大家以后在写正则的时候,一定要在正则表达式前面加上r
位数* + ? {n} {n,} {n,m}
*(位数)任意多个(0个1个多个)
+(位数)任意多个(至少有一位)
?0位或一位
{n}有n位 eg:{3} 表示有3位
{n,}至少n位
{n,m}n-m区间范围
分组(group)在正则表达式中,使用圆括号()将正则包裹起来,会形成正则匹配后的二次筛选。分组最好的好处就是能够形成二次筛选
贪婪模式与懒惰模式贪婪模式和非贪婪(懒惰)模式:在python中,默认是贪婪模式在.*+?{n}{n,}后面加上?,可以将贪婪模式转换成费贪婪模式
>>> s="<div><ul><li><a href="">哈哈1</a></li><li><a href="">哈哈2</a></li></ul></div>"
>>> re.sub(r"</?.*?>","",s)
'哈哈1哈哈2'
>>> re.findall(r"<\w+>(.*)</\w+>",s)
[<ul><li><a href="">哈哈1</a></li><li><a href="">哈哈2</a></li></ul>]  #贪婪模式
>>> re.findall(r"<\w+>(.*?)</\w+>",s)
[哈哈1,哈哈2]  #将贪婪模式转换成非贪婪
>>> re.match(r"<(\w+)>.*</\1>","<a>这是一个连接标签</a>")
<_sre.SRE_Match object; span=(0, 15), match='<a>这是一个连接标签</a>'>

3.常用正则表达式

用户名^[a-z0-9_-]{3,16}$
密码^[a-z0-9_-]{6,18}$
十六进制值^#?([a-f0-9]{6}|[a-f0-9]{3})$
电子邮箱^([a-z0-9_.-]+)@([\da-z.-]+).([a-z.]{2,6})$ 或 ^[a-z\d]+(.[a-z\d]+)*@(\da-z?)+(.{1,2}[a-z]+)+$
URL^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w\ .-]*)*\/?$
IP 地址((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
HTML 标签^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$
删除代码\注释(?<!http:|\S)//.*$
Unicode编码中的汉字范围^[\u4e00-\u9fa5]+$

4.re模块中的方法

方法:
	match("要匹配的","待匹配的") #表示从头匹配,返回的是一个对象,提取用group()函数
	findall() #返回的是一个列表、
	sub()
	search()
	split() #分割字符串
	>>> re.split(r"\.","www.baidu.com")
	['www', 'baidu', 'com']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑着蜗牛追汤圆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值