Python正则表达式Regex(笔记)

正则表达式语法

正则表达式,Regular Expression,用于模式匹配,表达式中的字符分为:普通字符(Ordinary Character)和特殊字符(Special Character)。特殊字符就是在模式匹配时具有特殊用的字符,如“*”、”+”等,除去特殊字符剩下的都是普通字符。

使用python中的raw string,在字符串前加r修饰,字符串会被原样解析,如 r”\n” 会被解释成两个字符 \ 和 n,如果不使用r,会被解析成\n一个字符。

常用的语法

符号 含义
. 匹配任意字符
[ ]< 匹配字符集中的任何一个
* 匹配前一个字符0次至无穷次
\d 数字:0-9
+ 匹配前一个字符1次至无穷次
\s 空白字符
匹配前一个字符0次或1次
\w 单词字符:a-z,A-Z,0-9
^ 匹配字符串的开头
{m} 匹配前一个字符m次
$ 匹配字符串的结尾
( ) 括号内的字符作为一个分组

完整版如下图 AstralWind的cnblog Python正则表达式指南 一文

正则表达式的使用

python中需要import re,使用方式有两种:使用RegexObject对象或直接使用re的模块级函数。

#-*- coding: utf-8 -*-
import re
#使用RegexObject对象
p = re.compile(r'^a.*b$') #p是一个RegexObject对象
                           #匹配a开头b结尾的字符串
print(p.match('acb'))#匹配成功,输出:<_sre.SRE_Match object at 0x00AB7A30>
print(p.match('bac'))#匹配失败,输出: None

#使用re模块级函数
print(re.match(r'^a.*b$',r'a b')) #匹配成功

match方法-开头匹配

re.match(pattern,string[,flag=0]),从字符串string开头处开始匹配,只匹配一次

如re.match(r'a',r'ab')匹配成功,re.match(r'a',r'ba')匹配失败

search方法-扫描匹配

re.search(pattern,string[,flag=0]),扫描string的所有子串,返回匹配的第一个或者匹配失败时返回None

如re.search(r'a',r'ab')匹配成功,re.search(r'a',r'ba')也匹配成功,因为模式’a’和r‘ba’的子串’a’匹配成功

findall方法-所有匹配子串

re.findall(pattern,string[,flag=0]),返回所有匹配的子串

#匹配所有ab之间有一个数字0或1的串
print (re.findall(r'a[01]b',r'a1ba0baab'))
#输出:['a1b', 'a0b']

sub方法-字符串替换

sub(replacement, string[, count = 0])

p = re.compile(r'\d{2}')#连续出现了两个数字
print(p.sub(r'b',r'a1a01'))#输出a1ab,将连续的两个数字换成b

主要参考资料源如下

作者:JarvisChu
原文链接:Python正则表达式Regex(笔记)
版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0

发表评论