正则表达式简介
正则表达式是一种文本模式,包括普通字符(例如:a~Z之间的字母)和特殊字符(又称为"元字符")。正则表达式通常用来检索、替换那些匹配某个模式的字符串
正则表达式语法
正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串。
普通字符
普通字符包括没有显示指定标点为原符号的所有可打印和不可打印字符,包括所有大小写字母、数字、标点符号和其他一些符号。
要判断一个长度为1的字符串是否为英文大写字母,可以写作:
[A-Z]
要判断一个长度为1的字符串是不是英文字母,这里就包含了大写和小写,可以写作:
[A-Za-z]
要匹配字符串"Good afternoon"中的所有a、o、e字母,可以写作:
[aoe]
要判断一个长度为2 的字符串是否为英文小写字母,可以写作:
[a-z][a-z]
元字符
元字符就是在正则表达式中有特殊含义的字符,可以用来规定位于元字符前面的字符在目标对象中的出现模式
较为常用的元字符包括:"*"、"+"、"?"等
ad*
表达式可以匹配"a"或者"add"
正则表达式有很多元字符,下表是常见的元字符【取一小部分】
|-----|------------------------|
| 元字符 | 描述 |
| ^ | 匹配输入字符串的开始位置 |
| ? | 匹配前面的字符零次或者一次 |
| + | 匹配前面的字符一次或者多次 |
| * | 匹配前面的字符零次或者多次 |
| $ | 匹配字符串结束的位置 |
| \D | 匹配一个非数字字符等价于[^0~9] |
| \d | 匹配一个数字字符。等价于[0~9] |
| \r | 匹配一个回车符 |
| \f | 匹配一个换页符 |
限定符
限定符用来指正则表达式的一个给定组件必须要出现多少次才能满足匹配。有"*"、"+"、"?"、"{n}"、"{n,}""{n,m}"六种。
|-------|----------------------------------|
| 限定符 | 描述 |
| * | 限定符表示匹配前面的字符零次或者多次 |
| + | 限定符表示匹配前面的字符一次或者多次 |
| ? | 限定符表示匹配前面的字符零次或者一次 |
| {n} | 限定符匹配前面的字符n次,n是一个非负整数 |
| {n,} | 限定符至少匹配前面的字符n次,n是一个非负整数 |
| {n,m} | 限定符至少匹配前面的字符n次并且最多匹配m次,n,m均为非负整数 |
字符转义
有不少字符试图在对其进行匹配时需要进行特殊处理。要匹配这些字符,要先将这些字符转义,即在字符前面加上"\"。例如要匹配"{"本身,则用正则表达式为:
[\{]
定位符
定位符能够将正则表达式固定到行首或者行尾,也可以创建只在单词内或者只在单词开头或者只在单词的结尾出现的正则表达式。
分组
小括号字符的第一个作用是可以改变限定符的作用范围。例如:(m|f)ood就是匹配单词mood或者food
小括号的第二个作用就是分组,也就是创建子表达式。例如([a-z]{1,2}){3}就是重复操作三次。
在Python中使用正则表达式
在Python中使用正则表达式时i,是将其作为模式字符串使用的。例如,将匹配非数字的一个字符的正则表达式表示为模式字符串,可以写作:
'[^0-9]'
将匹配以字母a开头的单词的正则表达式转换成模式字符串,不能直接在两侧添加引号定界符,需要将其中的"\"进行转义,可以写作:
'\\ba\\w*\\b'
使用re模块实现正则表达式操作
匹配字符串
①使用match()方法进行匹配
语法格式如下:
re.match(pattern,string,[flags])
pattern:表示模式字符串,由要匹配的正则表达式换来
string:表示要匹配的字符串
flags:可选参数,表示标志位。
②使用search()方法进行匹配
语法格式:
re.search(pattern,string,[flags])
③使用findall()方法进行匹配
语法格式:
re.findall(pattern,string,[flags])
替换字符
sub()方法用于实现字符串替换
语法格式如下:
re.sub(pattern,rep1,string,count,flags)
使用正则表达式分隔字符串
split()方法用于实现根据正则表达式分隔字符串,并且以列表的形式返回.
语法格式如下:
re.split(pattern,string,[maxsplit],[flags])