元字符:
.
除换行符的任意字符
\ 转义字符
[...] 字符集合
\d 数字:[0-9]
\D 非数字[0-9]
\s 空白字符
[<空格>\t\r\n\f]
\S 非空白字符[^\s]
\w
单词字符[A-Za-z0-9_]
\W 非单词字符[^\w]
数量词:
*
匹配一个字符0或多次
+
匹配前一个字符1次或多次
?
匹配前一个字符0次或1次
{m}
匹配前一个字符m次
{0,}等同于* {1,}等同于+ {0,1}等同于?
{m,n} 匹配前一个字符m至n次
边界符:
^
匹配字符串开头,多行匹配每一行开头
$
匹配字符串末尾,多行匹配每一行末尾
\A
仅匹配字符串开头
\Z
仅匹配字符串末尾
\b
匹配\w和\W之间
(^ 放在字符集合外:表示匹配字符串开头
放在字符集合里:表示非)
逻辑、分组:
|
左右表达式任意匹配一个
先匹配左边一旦成功则跳过匹配右边
如果|没有包含在()中,匹配整个正则表达式
(...)
分组匹配,从左到右,每遇到一个编号+1,分组后可加数量词
(?P<name>...)
除了分组序号外,指定一个name的别名
\<number>
引用编号为<number>的分组匹配到的字符串
(?P=name)
引用别名为<name>的分组匹配到的串
方法、函数:
match()
决定RE是否在字符串刚开始的位置匹配
search()
扫描字符串,找到这个RE匹配的位置
findall()
找到RE匹配的所有子串,并把它们作为一个列表返回
finditer()
找到RE匹配的所有子串,并把它们作为一个迭代器返回
如果没有匹配到,match()和search()将返回None,否则返回MatchObject实例
MatchObject实例方法:
group()
返回被RE匹配的字符串
start()
返回匹配开始的位置
end()
返回匹配结束的位置
span()
返回一个元组包含匹配(开始,结束)的位置
p =
re.compile(...)
m =
p.match(‘stirng goes here‘)
if
m:
print ‘Match found:‘,m.group()
else:
print ‘No match‘
模块级函数:
match()
search()
sub()
re.sub(正则表达式string,要替换的string,原始字符串)
subn()
和sub用法一样,会同时返回替换的次数
split()
re.split(正则表达式,原始字符串string)
findall()
re属性(编译标志flag):
DOTALL,S
使.匹配包括换行在内的所有字符
IGNORECASE,I
使匹配对大小写不敏感
LOCAL,L
使本地化识别(locale-aware)匹配(法语等)
MULTILINE,M
多行匹配,影响^和$
VERBOSE,X
能够使用REs的verbose状态,使之被组织得更清晰易懂
分组:
(...)
(...|...)
当有分组时,findall返回的结果会优先返回分组(括号中)中的数据