正则表达式语法
行定位符
“^”表示行的开始,“$”表示行的结尾
^tm #可以匹配以tm开头的行
tm$ #可以匹配以tm结尾的行
tm #可以匹配含有tm的行
元字符
代码 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线或汉字 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
重复
限定符(指定数量的字符),例如,匹配8位QQ号可以用以下表达式:
^\d{8}$
常用的限定符如下表所示:
限定符 | 说明 | 举例 |
---|---|---|
? | 匹配前面的字符零次或一次 | colou?r,该表达式可以匹配colour和color |
+ | 匹配前面的字符一次或多次 | go+gle,该表达式可以匹配的范围从gogle到goo…gle |
* | 匹配前面的字符零次或多次 | go*gle,该表达式可以匹配的范围从ggle到goo…gle |
{n} | 匹配前面的字符n次 | go{2}gle,该表达式值匹配google |
{n,} | 匹配前面的字符最少n次 | go{2,}gle,该表达式可以匹配的范围从google到goo…gle |
{n,m} | 匹配前面的字符最少n次,最多m次 | employe{0,2},该表达式可以匹配enploy、employe和employee 3种情况 |
字符类
方式:在方括号里列出所要查找的字符
[aeiou] 匹配任何一个英文元音字母
[.?!] 匹配标点符号“.”、“?”或“!”
[0-9] d] 代表一位数字,和\d完全一样
[a-z0-9A-Z] 完全等于\w
排除字符
正则表达式提供了“^”字符放到方括号中,表示排除的意思
[^a-zA-Z] 表示匹配一个不是字母的字符
选择字符
条件选择的逻辑,用选择字符(|)来实现,该字符可以理解为“或”,
(^\d{15}$)|(^\d{17})(\d|X|x)$
表达式的意思是可以匹配15位数字,或者18位数字,或者17位数字和最后一位。最后一位可以是数字或者是X或者是x。
转义字符
转义字符:用法和Python中一样
例如127.0.0.1,如果直接使用1,3点字符,就是:
[1-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}
这显然是不对的,因为在正则中点可以匹配任意一个字符,上面的表达式可能会匹配出比如127101011这样的字符串。所以我们要给点加上转义字符(\)
[1-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
分组
小括号的两个作用:
1.改变限定字符的作用范围
(thir|four)th
这个表达式的意思是匹配单词thirth或fourth,如果没有小括号,就变成了匹配fourth.
2.分组
(.[0-9]{1,3}){3}
对分组(.[0-9]{1,3})进行重复操作
在Python中使用正则表达式语法
在Python中使用正则表达式时,是将其作为模式字符串使用的。例如,将匹配不是字母的一个字符的正则表达式为模式字符串,可以使用以下代码:
‘[^a-zA-Z]’
而如果将匹配以字母m开头的单词的正则表达式转换为模式字符串,则不能直接在其两侧添加引号定界符,例如,下面的代码是不正确的:
‘\bm\w*\b’
而是需要将其中的“\”进行转义,转义后的代码为:
‘\\bm\\w*\\b’
由于模式字符串中可能包括大量的特殊字符和反斜杠,所以需要写为原生字符串,即在模式字符串前加r或者R。例如,上面的模式字符串采用原生字符串表示就是:
r’\bm\w*\b’