"""
0.fullmatch(正则表达式,字符串):查看字符串和正则表达式是否匹配,如果不匹配,返回False。
正则表达式:r '正则语法'
1.正则表达式是处理字符串的工具,通过不同的正则符号来描述字符串的规则
2.正则符号:
(1)普通字符:除了在正则中特殊功能和特殊意义的符号意外的字符都算普通字符。
.:匹配任意字符,一个点匹配一个字符
\w:匹配一个数字,字母,下划线(ascii表中):一个\w只能配一个长度为4字符
\d:匹配一个数字字符;
\s:匹配任意一个空白字符 ,空白字符包括空格字符,换行字符,制表符。
大写字符
\D:匹配所有非数字字符
\S:匹配非空白字符
中括号语法:[字符集]-匹配字符集出现的任意一个字符,一个中括号匹配一个字符。【n-m】表示n到m,编码值。
[1-9]:匹配1到9中的任意一个值,编码值依次递增。
[a-zA-Z]:表示任意一个字母
[\t\n]:匹配任意一个空字符
[\4u00-\u9fa5]:匹配任意一个中文字符
[^字符集]:匹配不在字符集中的任意一个字符
"""
from re import fullmatch, search
re_str = r'abc..123'
result = fullmatch(re_str, 'abc 123')
print(result)
"""
检测符号:
1.\b:检查是否是单词边界
单词边界:能够将两个单词隔开并且不会产生歧义的任意符号:空白字符,标点符号,连接符等,字符串开头和字符串结尾。
匹配规则:先去掉\b对字符串进行匹配,如果匹配成功再检查\b所在的位置是否是单词边界。
^[]检查字符串开头
所在的位置是否是字符串的结尾
"""
"""
控制次数的符号:字符符号
- 匹配0次或者多次
a:a出现0次或者多次
123\d:123后出现0次或者多次数字
2.+-匹配2次或者多次
3.?匹配0次或者1次
4.{N}匹配N次
a{5}:匹配5个a
{M,N}:匹配M到N次(匹配至少M次,最多N次)
{M,}:匹配至少M次
{,N}:最多匹配N次
5.贪婪和非贪婪
在匹配次数不确定的时候,会出现贪婪或者非贪婪两种情况;默认情况都是贪婪。
什么是贪婪:在能够匹配成功的前提下,匹配次数尽可能多。
非贪婪:在能够匹配成功的前提下,匹配次数尽可能少。
"""
'''
分之:
符号:正则1 | 正则2 | 正则3 在两者中间选择一个匹配。先让正则1匹配,匹配成功就成功,否则让正则2去匹配。
分组:
()把括号里的内容作为一个整体
整体操作:r'(\d\d|[a-z]{2})abc' ;r'([a-z]\d){3}'
分组:将结果分段,
转义:
在正则中有特殊功能和特殊意义的符号前加\,让这个符号的特殊功能和意义消失。
在【】中具有特殊意义的符号:^放在开头。一些特殊符号在【】里面的特殊功能消失。
'''
re模块
'''
- compile(正则表达式):生成一个正则对象
2.字符串匹配:fullmatch(正则表达式,字符串)正则表达式和字符串完全匹配
match(正则表达式,字符串) 匹配字符串开头
以上两个方法的结果,匹配失败返回None,匹配成功会返回对象。
result=fullmatch(正则表达式,字符串)
获取匹配到的字符串:
获取匹配到的字符串:匹配对象.group(),结果是字符串
匹配对象.group(N),获取正则表达式中第N个分组匹配到的字符串
获取匹配到的字符串在原字符串中的范围:
匹配对象.span(),返回匹配结果在源字符串中的下标范围。左闭右开的区间。
匹配对象.span(N),返回第N个分组匹配到的结果在原字符串中的范围。
获取原字符串:
匹配对象.sting
2.查找
search(正则表达式,字符串):在字符串中查到第一个满足正则表达式的子串,如果找到了结果是匹配对象,找不到结果是None。
findall(正则表达式,字符串):获取字符串中所有满足正则表达式的子串,以列表的形式返回,如果没有元素,返回空列表。
如果正则表达式中有分组,列表中的匹配结果只会取分组匹配到的内容。
finditer(正则表达式,字符串):获取字符串中所有满足正则表达式的子串,返回值是一个迭代器。
3.切割
split(正则表达式,字符串):将字符串中满足正则表达式的子串作为切割点,对字符串进行切割。
返回一个字符串列表;
4.替换
sub(正则表达式,字符串1,字符串2):将字符串2中所有满足正则表达式的子串都替换成字符串1。