匹配单个字符:a . \d \D \w \W \s \S [...] [^...]
匹配重复性 : * + ? {N} {m,n}
匹配某个位置 : ^ $ \A \Z \b \B
其他 : | () \
练习
匹配长度8-10位的密码 必须以数字开头,数字字母下划线组成
^[0-9]\w{7,9}$
2.转义字符
正则表达式特殊符号 :
. * ? $ '' "" [] {} () \ ^
如果想匹配特殊符号则加转义 \"\.\" -----> "."
r ---> raw 原生字符串 : 不进行转义
>>> import re
>>> re.findall(r"\bis", ''This is'')
['is']
3.贪婪和非贪婪
正则表达式默认的重复匹配模式 : 贪婪模式
尽可能多的向后匹配
贪婪元字符: * + ? {m,n}
>>> re.findall("ab+",' abbbbbbbbcded')
['abbbbbbbb']
>>> re.findall("ab*",' abbbbbbbbcded')
['abbbbbbbb']
>>> re.findall("ab?",'abbbabaacded')
['ab', 'ab', 'a', 'a']
>>> re.findall("ab{2,5}",'abbbbbbbbcded')
['abbbbb']
非贪婪元字符: *? +? ?? {m,n}?
>>> re.findall("ab*?",'abbbbbbbbcded')
['a']
>>> re.findall("ab+?",'abbbbbbbbcded')
['ab']
>>> re.findall("ab??",'abbbbbbbbcded')
['a']
>>> re.findall("ab{2,5}?",'abbbbbbbbcded')
['abb']
使用()可以为一个正则表达式建立一个子组,子组可以看做内部的整体
5.子组的作用
1. 增加子组后对正则表达式整体的匹配内容没有影响
2. 子组可以改变重复元字符的重复行为
3. 子组在某些操作中可以对子组匹配内容单独提取
6.子组的注意事项
1.每个正则表达式可以有多个子组,由外到内由左到右为第一第二。。。。子组
2.子组通常不要交叉
7.捕获组和非捕获组(命名组和非命名组)
子组命名格式
(?P<name>abc)
1.很多编程接口可以直接通过名字获取子组匹配内容
2.捕获组中的正则表达式可以通过名字重复调用
(?P=name)
(?P<dog>ab)cdef(?P=dog) -----> abcdefab
'ababababab'
>>> re.search('(?P<dog>ab)cdef(?P=dog)','abcdefabcde').group()
'abcdefab'