正则表达式regular expression
用于描述一种字符串匹配的模式pattern
,它可用于检查一个字符串是否包含某个子字符串,也可用于从字符串中提取匹配的子字符串,或者对字符串中匹配的子字符串进行替换操作。
Python正则表达式常用于进行数据清洗、数据抓取、网络爬虫等工作,能达到事半功倍的效果,非常值得学习。
正则表达式由普通字符和特殊字符(也叫元字符或限定符)组成。
元字符
元字符 | 描述 |
---|---|
. | 匹配除换行符以外的任意字符 |
\d | 匹配数字, 等价于字符组[0-9] |
\w | 匹配字母, 数字, 下划线 |
\s | 匹配任意的空白符(包括制表符,空格,换行等) |
\b | 匹配单词开始或结束的位置 |
^ | 匹配行首 |
$ | 匹配行尾 |
反义元字符
元字符 | 描述 |
---|---|
\D | 匹配非数字的任意字符, 等价于[^0-9] |
\W | 匹配除字母,数字,下划线之外的任意字符 |
\S | 匹配非空白的任意字符 |
\B | 匹配非单词开始或结束的位置 |
[^x] | 匹配除x以外的任意字符 |
重复限定符
限定符 | 描述 |
---|---|
* | x>=0 |
+ | x>=1 |
? | x=0 or x=1 |
{n} | x=n |
{n,} | x>=n |
{n,m} | n<=x<=m |
字符组
排除性字符组
多选结构
括号
转义字符
操作符的运算优先级
手机号码是一串1开头的11位号码,我们就根据此规则来书写正则表达式
①:1开头:^1
②:除去首位1,还剩下10位数字,\d
表示一位数字
③:限定符{10}
表示字符重复10次
④:到这里,匹配就应该结束了,所以还需要设置结尾符号$
⑤:综合上述信息,手机号码的正则表达式为^1\d{10}$
身份证号码有15位和18位两种,其中18位号码结尾可能是x
①:1~8开头:^[1-8]
②:除去首位,15位身份证号还剩下14位数字,\d{14}
③:再加上结尾符,15位身份证正则表达式为:^[1-8]\d{14}$
④:除去首位,18位身份证号还剩下17位数字,且最后一位可能是X
,\d{16}(\d|X)
⑤:再加上结尾符,18位身份证正则表达式为:^[1-8]\d{16}(\d|X)$
⑥:将15位和18位两种正则结合,身份证号码的正则表达式为^[1-8](\d{14}|\d{16}(\d|X))$