正则表达式通常被用来验证、检索、替换那些符合某种特定规律排列的文本
在python中的运用是利用re模块来验证获取字符串对象中特定规律组合的部分
正则表达式即用包括但不限于将以上元字符组成的格式字符串与字符串中该规律的片段相比较,并返回找到的字符串片段
常用元字符:
元字符用法与占位符类似
. 匹配任何一个字符 :
如果是想匹配字符串中的 . 这一字符的话则需要加个转义符,即 \ .
| 用于表示或,主要用于两个独立元字符串:
如“z|food”能匹配“z”或“food”(此处请谨慎)。“[z|f]ood”则匹配“zood”或“food”
() 用于区分多个正则表达式:
通常会在按照特定规律分割字符串时用到
[ ] 匹配[ ]里面列举的字符,匹配一位:
主要用于精确匹配,可以自定义字符寻找范围,如[0-9a-zA-Z.]可以匹配一个数字、字母或者点,[0-9a-zA-Z.][0-9a-zA-Z_]可以匹配一个数字、字母或者点加上一个一个数字、字母或者下划线组成的两个连续字符
\w 匹配单词字符,a-z A-Z 0-9 汉字:
可以匹配任何单词字符的元字符,是比较常用的万能占位元字符
\W 匹配非单词字符
\s 匹配空白:
用于表示任何不可见字符,包括空格、制表符、换页符等
\d 匹配数字0-9
^ 匹配行首:
如^\d表示必须以数字开头
$ 匹配行尾:
如\d&表示必须以数字结尾
*匹配零次或多次 :
如0*表示匹配一个连续的0组成的最大片段,但有可能被前面的元字符抢占匹配导致无法匹配到
+匹配1次或多次:
在能匹配到的情况下至少匹配到一个字符,如果之前的元字符可能会抢占完需要匹配的字符,则+匹配会从前面的末尾抢回一个字符用于返回
? 限制匹配,匹配零次或1次:
可用于限制匹配,如前一位元字符可能全占匹配字符导致后一个元字符无法匹配到字符或者匹配为空时,在前一位元字符后面加上?可以放出所有符合后一位元字符的字符被后一位元字符所匹配
如re.match(r’^(\d+?)(0*)$’, ‘102300’).groups()可以让后面0尽可能多的匹配到对应字符
也可以用于表示只匹配零次或者一次
如“do(es)?”可以匹配“do”或“does”,可以更加灵活的寻找相应字符
{n} 匹配几位,跟在匹配字符后面 :
如re.match(r’\d+{3}’, ‘102300’).group()只会返回102而不会返回整个字符串
{n,} 匹配至少n个字符:
主要用于限制匹配下限,但不设匹配上限,如没有n个对应字符则返回空值
{n,m} 匹配n到m个字符:
完整的设置下限和上限,没有n个字符则返回为空,多余m个只返回m个字符
常用方法:
1、match()
从字符串开头开始匹配的方法,如果匹配的字符串开头没有对应字符则会直接返回空值
简单的实例演示:
import re
str_new='you_xiang呵呵@163.com'
ret1=re.match('\w+@163\.com',str_new)
try:
print(ret1.group())
except:
print('没有匹配到数据')
该代码可以简单的验证163邮箱账号,但是无法验证邮箱地址是否合理,如需更加精确的验证则需要编写更加复杂精确的正则表达式,在此不多做成述
2、search()
从字符串开头开始寻找对应的字符串片段,如果开头没有找到有效字符会继续寻找,直到末尾,找到则返回相应字符串,并且只返回一次
3、findall()
用于查找所有符合要求的字符串
使用语法与前两个相同,但是返回的是一个列表,可以直接输出而不用使用group