学习python正则表达式转义
特殊符号:
. * ? $ [] () {} ^ \
In [59]: re.findall('17\.36',"17.36")
Out[59]: ['17.36']
In [62]: re.findall('ok\?','Are your ok?')
Out[62]: ['ok?']
r---raw 字符串 :原生字符串,字符串的内容就是字 符串本身,不进行任何转义处理
贪婪和非贪婪
贪婪模式:正则表达式的重复默认总是尽可能多的向后 匹配内容
* + ? {m,n}
非贪婪模式 : 尽可能少的匹配内容
贪婪 ---》 非贪婪 *? +? ?? {m,n}?
In [77]: re.findall(r'ab*?',"abbbbbcde")
Out[77]: ['a']
In [78]: re.findall(r'ab+?',"abbbbbcde")
Out[78]: ['ab']
正则表达式分组
可以使用()为一个正则表达式建立子组,子组可以看做正则表达式的一个局部整体
子组的作用
1. 子组作为局部整体可以改变某些元字符的行为,比如重复,或等
In [85]: re.search(r'(ab)+','ababababcdef').group()
Out[85]: 'abababab'
In [89]: re.search(r'.+(\.com|\.cn)','abc@123.cn').group()
Out[89]: 'abc@123.cn'
2. 子组在某些操作中可以单独提取匹配内容
In [92]: re.search(r'(ab)+','ababababcdef').group(1)
Out[92]: 'ab'
子组使用注意事项
* 一个正则表达式中可以有多个子组,正则表达式依然是通过整体匹配内容。
* 子组由外到内,由左到右为第一 第二 第三。。。子组
((ab)cd(ef)g) abcdefg ab ef
* 子组内容不会重叠
捕获组和非捕获组 (命名组,非命名组)
格式: (?P<name>pattern)
In [94]: re.search(r'(?P<dog>ab)cdef','abcdefgh').group()Out[94]: 'abcdef'
命名作用 :
1. 很多编程接口可以通过名称获取指定组的内容
2. 命名组可以被重复调用
格式 : (?P=name)
In [99]: re.search(r'(?P<dog>ab)cd(?P=dog)',"abcdab").group()
Out[99]: 'abcdab'