首页Python

Python 常用正则表达式

2020年10月11日 19:23132

正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。

常用的正则表达式符号

符号 含义 例子 匹配结果
* 匹配前面的字符、子表达式或括号里的字符0次或多次 a*b* aaaaaaaa,aaabbbbb,bbbbbb
+ 匹配前面的字符、子表达式或括号里的字符至少1次 a+b+ aaaaaaab,aaabbbbb,abbbbbb
[] 匹配中括号里的任意一个字符(相当于"任选一个") [a-z]* APPLE,CAPITALS,QWERTY
() 表达式编组(在正则表达式的规则里编组会优先运行) (a*b)* aaabaab,abaaab,ababaaaaab
{m,n} 匹配前面的字符、子表达式或括号里的字符m到n次(包含m或n) a{2,3}b{2,3} aabbb,aaabbb,aabb
[^] 匹配任意一个不在中括号里的字符 [^a-z]* apple,lowercase,qwerty
| 匹配任意一个由竖线分割的字符、子表达式(注意是竖线,不是大写字母I) b(a|i|e)d bad,bid,bed
. 匹配任意单个字符(包括符号、数字和竖线) b.d bad,bzd,b$d,b d
^ 指字符串开始位置的字符或子表达式 ^a apple,asdf,a
\ 转义字符(把有特殊含义的字符转换成字面形式) \.\|\\ .|\
$ 经常用在正则表达式的末尾,表示"从字符串的末端匹配"。如果不用它,每个正则表达式实际都带着".*"模式,只会从字符串开头进行匹配。这个符号可以看成是^的反义词 [a-z]*[a-z]*$ ABCabc,zzzyx,Bob
?! "不包含",这个奇怪的组合通常放在字符或正则表达式前面,表示字符不能出现在目标字符串里。这个符号比较难用,毕竟字符通常会在字符串的不同位置出现。如果要在整个字符串中彻底排除某个字符,就加上^和$符号 ^((?![a-z]).)*$ no-caps-here,$ymb01sa4ef!ne

实际应用(识别邮箱)

正则表达式在实际中的一个经典应用是识别邮箱地址,虽然不同邮箱的具体规则不同,但是我们还是可以创建几条通用规格,

规则 正则表达式
1、邮箱地址的第一部分至少包括一种内容:大写字母、小写字母、数字0-9、点号(.)、加号(+)、下划线(_) [A-Za-z0-9\._+]:用"A-Z"表示"A-Z中的任意大写字母"。把所有可能的序列和符号放在中括号里表示"可以是方括号中的任何一个字符"。后面的加号表示"这些符号都可以出现多次,且至少出现1次"
2、之后、邮箱地址会包含一个@符号 @符号很简单,必须出现在中间位置,并且只能出现1次
3、在@符号之后,邮箱地址还必须包含一个大写或小写字母 [A-Za-z]+:可能只在域名的前半部分、@符号后面用字母,且至少有一个字符
4、之后跟一个点号(.) \.在域名前必须有一个点号(.)
5、最后邮箱地址用com、org、cn、net结尾 (com|org|cn|net)这样列出了点号之后的字符
完整的正则表达式:[A-Za-z0-9\._+]+@[A-Za-z]+\.(com|org|cn|net)