一、正则表达式转义
正则中的特殊符号:
. * ? $ [] {} () | \
正则表达式匹配特殊字符如果需要加 \ 表达转义,比如:
pattern string
python "\\$\\d+" "$10"
raw字串:原始字符串对内容不解释转义,就表达内容原本意义
二、贪婪与非贪婪
贪婪模式:正则表达式的重复匹配总是尽可能多的向后匹配更多内容
* + ? {m,n}
非贪婪(懒惰模式):尽可能少的匹配内容
贪婪 -------》非贪婪 *? +? ?? {m,n}?
e.g. In [58]: re.findall(r"ab+?","abbbbbbb")
Out[58]: ['ab']
In [59]: re.findall(r'ab{3,4}?','abbbbbbbbb')
Out[59]: ['abbb']
In [60]: re.findall(r'ab??','abbbbbbb')
Out[60]: ['a']
三、正则表达式的子组
可以使用()为正则表达式建立子组,子组可以看作是正则表达式内部操作的一个整体
*子组是在正则表达式整体匹配到内容的前提下才会发挥作用,他不影响正则表达式整体去匹配目标内容这一原则
e.g. In [66]: re.search(r"(ab)+\d+","ababab1213").group()
Out[66]: 'ababab1213'
子组所用:
1、作为内部整体可以改变某些元字符的行为
e.g. In [68]: re.search(r"\w+@\w+\.(com|cn)","abc@123.com").group()
Out[68]: 'abc@123.com'
2、子组在某些操作中可以单独匹配内容
e.g. In [72]: re.search(r"(https|http|ftp)://\S+","https://www.baidu.com").group()
Out[72]: 'https://www.baidu.com'
自组使用注意事项:
*一个正则表达式中可以有多个子组
*子组一般由外到内,由左到右称之为第一,第二,第三...子组
*子组不能重叠,嵌套也不宜过多
四、捕获组和非捕获组
格式:(?P<name>pattern)
e.g. In [74]: re.search(r"(?P<dog>ab)cdef","abcdefghti").group('dog')
Out[74]: 'ab'
作用:可以通过组名更方便获取某组内容
五、正则表达式设计原则
1、正确性,能正确匹配到目标内容
2、排他性,除了要匹配的内容,尽可能不会匹配其他内容
3、全面性,需要对目标的各种情况考虑,做到不遗漏
六、re模块
re. regex = compile(pattern,flags = 0)
功能:生成正则表达式对象
参数:pattern 正则表达式
flags 功能标志位,丰富正则表达式的匹配功能
返回值:返回正则表达式对象
re.findall(pattern,string,flags)
功能:从目标字符串查找正则匹配内容
参数:pattern 正则表达式
string 目标字符串
flags 标志位
返回值:返回匹配到的内容
如果正则有子组则只返回子组对应的内容
regex.findall(string,pos,endpos)
功能:从目标字符串查找正则匹配内容
参数:pattern 正则表达式
string 目标字符串
pos 匹配目标的起始位置
endpos 匹配目标的终止位置
返回值:返回匹配到的内容
如果正则有子组则只返回子组对应的内容
re.split(pattern,string,flags = 0)
功能:根据匹配内容切割字符串
参数:pattern string flags(同上)
返回值:返回列表,列表中为切割的内容
re.sub(pattern,replaceStr,string,max,flags)
功能:替换正则匹配到的目标子串部分
参数:pattern
replaceStr 要替换的内容
string(同上)
max 最多替换几处 默认全部替换
flags(同上)
返回值:返回替换后的字符串
re.subn(pattern,replaceStr,string,max,flags)
功能:替换正则匹配到的目标子串部分
参数:pattern
replaceStr 要替换的内容
string(同上)
max 最多替换几处 默认全部替换
flags(同上)
返回值:返回一个元组,为实际替换了几处和替换后的字符串
re.finditer(pattern,string,flags)
功能:使用正则表达式匹配目标字符串
参数:pattern string flags(同上)
返回值:返回一个迭代对象,迭代到的内容是一个match对象
fullmatch()
功能:完全匹配目标字符串
参数:pattern,string,flags
返回值:返回匹配到的match对象,如果没有匹配成功返回None
match(pattern,string,flags)
功能:从开头位置匹配目标字符串
参数:pattern,string,flags
返回值:返回匹配到的match对象,如果没有匹配成功返回None
search(pattern,string,flags)
功能:从开头位置匹配目标字符串
参数:pattern,string,flags
返回值:返回匹配到的match对象,如果没有匹配成功返回None
compile对象属性:
flags:标志位
pattern:正则表达式
groups:有多少子组
groupindex:捕获组形成组名和序列号的字典,组名为键,序列号为值