正则表达式(regex/RE)是一种文本模式,包括普通字符和特殊字符,它是使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。
正则表达式最突出的特点就是简洁,即有“一行胜前言”的功效,尤其是在表达无穷字符串组时非常方便。正则表达式在文本处理中十分常用,表达文本类型的特征(病毒、入侵等),同时查找或替换一组字符串,匹配字符串的全部或部分。
正则表达式的使用:
编译:将符合正则表达式语法的字符串转换成正则表达式特征。可以认为编译后的特征与一组字符串是对应的,而编译前的正则表达式只是一个符合正则表达式语法的字符串。
PN | 正则表达式: |
PYN | P(Y|YT|YTH|YTHO)?N |
PYTN | Regex = ‘P(Y|YT|YTH|YTHO)?N’ |
PYTHN | 编译 |
PYTHON | P = re.compile(regex) |
· 表示任何单个字符;
[ ] 表示字符集,对单个字符给出取值范围,例如[abc]表示a,b,c;
[^] 表示非字符集,对单个字符给出排除范围,例如[^abc]表示非a或非b或非c的单个字符;
* 表示前一个字符0次或无限次扩展,例如abc*表示ab.abc.abcc等;
+ 表示前一个字符1次或无限次扩展,例如abc+表示abc,abcc;
? 表示前一个字符0次或1次扩展,例如abc?表示ab,abc;
| 表示左右表达式任意一个,例如abc|def表示abc,def;
{m} 表示扩展前一个字符m次,例如ab{2}c表示abbc;
^ 表示匹配字符串开头,例如^abc表示abc且在一个字符串的开头;
$ 表示匹配字符串结尾,例如$abc表示abc且在一个字符串的结尾;
{m,n} 表示扩展前一个字符m至n次,例如ab{1,2}c表示abc,abbc;
( ) 表示分组标记,内部只能使用操作符|,例如(abc)表示abc,(abc|def)表示abc,def;
\d 表示数字,等价于[0-9];
\w 单词字符,等价于[A-Za-z0-9]。
接下来介绍几个常见的正则表达式:
^[A-Za-z]+$表示用26个字母组成的字符串;
^-?\d+$表示整数形式的字符串;
^[0-9]*[1-9][0-9]*$表示正整数形式的字符串;
\d{6}可以表示中国境内的邮政编码;
[\u4e00-\u9fa5]表示匹配中文字符;
\d{3}-\d{8} | \d{4}-\d{7}表示中国境内的固定电话号码;
除此之外,正则表达式也可以用来表示比较复杂的字符串,比如IP地址。我们都知道IP地址分四段,每一段的最大值为255,为了表示0-255的值,正则表达式将其分为4段分别表示,如:
0-99:[1-9]?\d
100-199:1\d{2}
200-249:2[0-4]\d
250-255:25[0-5]
则IP地址可表示为:
(([1-9]?\d | 1\d{2} | 2[0-4]\d | 25[0-5]).){3}([1-9]?\d | 1\d{2} | 2[0-4]\d | 25[0-5])