#Author ddz
"""
正则表达式 是用匹配或者描述 字符串的工具
用处:
a.判断字符串是否满足某个条件(匹配)---判断输入是否为邮箱/号码/ip地址
b.提取满足条件的字符串
c.字符串替换
re模块中相应方法来支持正则表达式的匹配、查找、替换等功能
"""
from reimport fullmatch
"""
fullmatch(正则表达式, 字符串) --判断是否全匹配
正则表达式:就是一个字符串,其中是正则表达式语法,前加r''阻住转义
两部分:1、正则语法对应的字符 2、普通字符
返回值: None 或 <_sre.SRE_Match object; span=(0, 2), match='11'>
1、 .(匹配任意字符) 一个 点 之匹配一个任意字符
2、 \w(匹配任意一个 字母/数字/下划线)
\W(匹配任意一个 非 字母/数字/下划线)
3、 \s(匹配任意一个 空白字符,空格、制表符、换行(回车)都是空白字符)
\S(匹配任意一个 not 空白字符)
4、 \d(匹配任意一个 数字字符)
\D(匹配任意一个 not 数字字符)
5、 \b(检测单词边界) -->一个\b不会去匹配一个字符,而是单纯的检测\b出现的位置是否是单词边界
单词边界:字符串开始和结尾、空格、换行、标点符号等,可以将两个单词隔开的字符都是单词边界
\B(检测 not 单词边界)
6、 ^(检测是否是字符串开头)
7、 $(检测是否是字符串结尾)
8、 [](匹配 中括号 里出现在的任意 一个字符)
example: [字符集] -->[abd],匹配abd中任意一个
[字符1-字符2] -->匹配Unicode编码值1到2中任意一个
注意:- 在中括号中,如放在两数字间表示范围
9、 [^字符集](匹配一个不在字符集中的任意字符),^必须放在最前面才有效
特殊用法:
10、 *(匹配0次或多次)
字符* -->表示出现0次或多次
11、 +(匹配一次或多次)
字符+ -->表示出现1次或多次
12、 ?(匹配0次或1次)
字符? -->表示出现0次或1次 例:[+-]?
13、 {}(直接指定次数)
{N} 匹配N次
{M,N} 匹配M到N次
{M,} 至少匹配M次
{,N} 至多匹配N次
"""
print(fullmatch(r'^\b[^4-9[][avdsd是]\w.\s..\d$','2是a1\n16'))
print(fullmatch(r'[a-zA-Z_]\w*','adfssdfr3*sdf'))
print(fullmatch(r'[+-]?[1-9][0-9]*','11114511011'))
print(fullmatch(r'[a-zA-Z0-9]{6,16}','111L145161011'))
"""
1、 | 分之 ,条件1 | 条件2 re_str=r'abc|b|dd'(匹配成功abc,dd,b)
先用条件1去匹配,若成功就匹配成功,若失败再去匹配条件2
注意:会把 | 前后作为一个整体条件
2、 () 分组 ,
a 组合,将括号内容作为一个整体
b 捕获,使用带括号的正则表达式匹配成功后,只捕获括号内容
c 重复,在正则表达式中通过\数字来重复()中匹配的内容,内容出现在\数学处,数字代表前面第几个分组
3、 转义字符
正则表达式在特殊符号(. + *...)前加\,让其无意义
注意;在中括号内,特殊符号无特殊意义,代表自己
\ 在哪 都需要转义
- 在[]外无特殊意义,在[]中要表示- ,就不要放在两个字符之间
"""
print(fullmatch(r'(a)bb\1([1f])jfh','abbafjfh'))
"""
1、 compile(正则表达式字符串)
将正则表达式字符串转换成正则表达式对象
re_ob=re.compile(r'\d+'); re_ob.fullmath('5555')
2、 fullmatch(正则表达式, 字符串) --判断是否全匹配
返回值 匹配对象 或 None
<_sre.SRE_Match object; span=(0, 8), match='abbafjfh'>
1.对象.span(0) -->获取匹配成功的区间,左闭右开,group=0默认全匹配
对象.start(0)/end(0)-->获取开始、结束下标
2.对象.group()/group(0)-->获取正则表达式完全匹配的结果
对象.group(group>0)-->获取正则表达式第index个分组(括号代表分组)匹配结果
3.对象.string()--> 获取匹配原字符串
3、 search(正则表达式, 字符串) -->判断是否部分匹配
4、 match(正则表达式, 字符串) -->匹配字符串开头
5、 findall(正则表达式, 字符串)-->获取字符串中满足正则表达式的所有子串,返回一个列表
注意:如正则表达式中有分组,只取分组中匹配到的,如有多个分组 匹配到每组结果放进一个元组内
6、 finditer(正则表达式, 字符串)-->获取字符串中满足正则表达式的所以子串,返回值是迭代器,其元素是匹配对象
7、 split(正则表达式, 字符串)-->将字符串按照满足正则表达式的子串进行分割,返回列表
8、 sub(正则表达式,new,字符串)-->将字符串按照满足正则表达式的子字符串 替换 成新字符串
"""