文章目录
一、是什么
一种描述字符串的规则的表达式。
如^\d{8}$
表示 八位的号码
1、元字符
其中,$表示匹配字符串的结束;^表示匹配字符串开始;\d匹配数字
这些字符称为元字符(指那些在正则表达式中具有特殊意义的专用字符)
常见元字符:
元字符 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母or数字or下划线or汉字 |
\s | 匹配任意的空白字符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
如^tm
匹配以tm为开头的字符串
2、限定符
大概就是对(元)字符进行一些限定或者说修饰。先看下表
限定符 | Value |
---|---|
? | 匹配前面的字符零次或一次 |
+ | 匹配前面的字符一次或多次 |
* | 匹配前面的字符零次或多次 |
{n} | 匹配前面的字符n次 |
{n,} | 匹配前面的字符 >=n次 |
{n,m} | 匹配前面的字符 >=n但<=m次 |
如colou?r
表示匹配colour
或color
\d{3}
表示\d\d\d
3、自定义字符类别
类似自定义一个元字符,用[]括起来,表示匹配[]内的所有字符
如[AEIOU]
表示匹配A、E、I、O、U中的任意一个
也可以指定范围,如[A-Z0-9a-z]
等同于不考虑汉字的\w
4、排除字符
匹配不符合相应类别的字符串,用[^]表示不符合的类别。
如[^eq]
表示匹配一个非e也非q的字符
5、选择字符 “|”
该字符可理解成“或”
如要匹配身份证号,身份证号规则是:
十五位数字或十八位数字或十七位数字+X
则对应匹配字符串为
(\d{15}$)|{\d}[17](\d|X)$
"(}“可以限定”|"的范围。
6、分组
()除了限定范围外,还可以分组。
如(\.[0-9]{1,3}){3}
表示把\.[0-9]{1,3}
重复三次。
也就是\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
二、在python中应用
要用模式字符串。为防止转义,要加上r。(具体也不是很理解,但加上r应该就为问题)
要引用re模块
1、match
re.match(pattern,string[flags])
- pattern:模式字符串(由正则表达式加上r转换而来)
- string:表示要匹配的字符串
- flags:表示标志位。如是否区分大小写。
作用:在字符串起始位置开始匹配。
常用标志
标志 | 说明 |
---|---|
A或ASCII(不是LL) | 1233213 |
I | 不区分大小写 |
S | '.'表示匹配所有字符,包括换行符 |
另外,可以用以下函数调取match的返回值。(若没有匹配到,则返回 None )
注意,None时一个值,不是字符串
函数 | 说明 |
---|---|
start() | 表示匹配的字符串的起始位置 |
end() | 表示匹配的字符串的终止位置 |
span() | 表示匹配的字符串的起始位置和终止位置组成的元组 |
string | 表示要匹配的字符串 |
group | 表示匹配到的字符串 |
如
m=re.match(r'mr_\w+','MR_SHOP mr_shop',re.I)
print(m.group())
输出
MR_SHOP
注意,若match()返回None,则调用m.group()会报错!
2、search()
搜索第一个匹配到的值,非必须在字符串起始位置。其他与match一样
3、findall()
搜索所有符合匹配的字符串,以列表形式返回符合匹配的那一段字符串。若匹配不到则返回空列表
参数与match相同
如
m=re.findall(r'mr_\w+','MR_SHOP mr_shop',re.I)
print(m)
输出
[‘MR_SHOP’,‘mr_shop’]
4、sub()
用正则表达式替换字符串
re.sub(pattern,repl,string[,count][,flags])
- pattern:模式字符串
- repl:表示替换成的字符串
- string:表示要被替换的原始字符串
- count:替换最大次数,默认为0,表示替换所有适配的
- flags:表示标志位,详见上文标志位表。
5、分割字符串
split(),与之前的split相似。
不过分割的字符由模式字符串指定。
re.split(pattern,string[,maxspit][,flags])
三、总结
有些地方理解的不透彻,标记在书上了,理解之后补上。