就其本质而言,正则表达式(或 RE)是一种小型的、高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。
字符匹配(普通字符,元字符):
1 普通字符:大多数字符和字母都会和自身匹配
>>> re.findall('alvin','yuanaleSxalexwupeiqi')
[]
2 元字符:. ^ $ * + ? { } [ ] | ( )
.占位符 表示占有一个位置 匹配换行符"
"外的字符
^表示从开头查找 多行模式中匹配每一行的开头
$表示从结尾查找 多行模式中匹配每一行的开头
*匹配前一个字符0或者无限次
+匹配前一个字符1或者无限次
?匹配前一个字符0或者1次
{n}匹配前一个字符n次
{m,n}匹配前一个字符m至n次
d 匹配任何十进制数; 它相当于类 [0-9]。
D 匹配任何非数字字符; 它相当于类 [^0-9]。
s 匹配任何空白字符; 它相当于类 [
fv]。
S 匹配任何非空白字符; 它相当于类 [^
fv]。
w 匹配任何字母数字字符; 它相当于类 [a-zA-Z0-9_]。
W 匹配任何非字母数字字符; 它相当于类 [^a-zA-Z0-9_]
匹配一个特殊字符边界,比如空格 ,&,#等
[ ] 可以取其中一个值 内部除了 ^ -其他无特殊意义
( )分组 被括起来的表达式作为分组
(?P<name>)分组 额外的别名!
(?:)取消优先级
例:ret=re.search('(?P<id>d{2})/(?P<name>w{3})','23/com')
print(ret.group())#23/com
print(ret.group('id'))#23
|元字符 表示或
例:
ret=re.search('(ab)|d','rabhdg8sd')
print(ret.group())#ab
例:
-
[0-9a-zA-Z\_]
可以匹配一个数字、字母或者下划线; -
[0-9a-zA-Z\_]+
可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100'
,'0_Z'
,'Py3000'
等等; -
[a-zA-Z\_][0-9a-zA-Z\_]*
可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量; -
[a-zA-Z\_][0-9a-zA-Z\_]{0, 19}
更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)
re模块下的常用方法
re.findall("a","alvin yuan") #返回所有满足匹配条件的结果,放在列表里