正则表达式是描述文本序列的标准表达方式,在文本处理中用正则表达式来描述文本中的字符串。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。匹配时不会重复匹配其子串。
1.用字符表示字符
1.基础符号【均只能匹配一个字符】
str(' ') | 正则表达式(' ')【'\'均有特殊意义】 |
指定数字 如:‘1’ | 与之相同 【 '1'】 |
指定字母 如::‘a' | 与之相同 【 'a'】 |
指定特殊符号 如:指定'-' | 需加上转义符'\' 【'\-'】 |
指定多种字符【析取】 如:'a'或’b' | '[ ]' 【'[ab]'】 |
表示范围 如:1-3之间的数字 | '-' 【'[1-3]'】【需与析取配合使用】 |
指定非这些字符的字符【非】 如: 非'a' 且 非'b' | '^'(脱字符) 【'[^ab]'】【需与析取配合使用,且脱字符在开方括号的第一个位置才有效】 |
空白 | ‘$’ 【只能放在结尾处】 |
'一个数字' | '\d' 或 '\w' |
'一个字母' | '\w' |
'一个字符' | '.'(通配符) |
‘一个空格’(包括Tab等空白符) | ‘\s' |
2.拓展符号【均需与基础符号组合使用,且只对前一个符号有效】
str(' ')【其中的某可不指定具体符号如:整数、字母等】 | 正则表达式(' ')【k为某字符】 |
’某字符可有可无'【0/1个】 | 'k?' |
'至少一个某字符' | 'k+' |
'n个某字符' | 'k{n}' |
'n-m个某字符' | 'k{n,m}' |
'任意个某字符' | 'k * ‘ |
r 表示原生字符串,不会转义 | r'k' |
匹配kk,但只返回()中的k | ‘(k)k’ |
2.用正则表达式提取字符串中的某些子串
功能 | 函数 | 参数解释 | 返回值 |
判断字符串中是否存在与正则表达式匹配的子串 【该子串起始位置为0,既从头开始匹配】
| re.match(partten,string,flags=0) | partten:正则表达式 string:被匹配的字符串 flags:修饰符 | 若匹配成功则返回一个match对象,否则返回None 可使用group() 或 groups() 匹配对象函数来获取search对象的字符串 |
判断字符串中是否存在与正则表达式匹配的子串 【该子串起始位置为任意,起点不一定为0】 | re.search(partten,string,flags=0) | partten:正则表达式 string:被匹配的字符串 flags:修饰符 | 若匹配成功则返回一个search对象,否则返回None 可使用group() 或 groups() 匹配对象函数来获取search对象的字符串 |
提取string中所有匹配正确的子串 | re.findall(partten,string,flags=0) | partten:正则表达式 string:被匹配的字符串 flags:修饰符 | 若匹配成功则返回一个非空list,否则返回[ ] |
按照能够匹配的子串将字符串分割 | re.split(pattern, string, maxsplit=0, flags=0) | partten:正则表达式 string:被匹配的字符串 maxsplit:最大切分次数 flags:修饰符 | 返回被切割后的非空list |
3.用正则表达式删除某字串
功能 | 函数 | 参数解释 | 返回值 |
将匹配到的字符进行替换 | re.sub(pattern, repl, string, count=0,flags=0) | pattern : 正则中的模式字符串 repl: 用以替换匹配到的字符 string : 要被查找替换的原始字符串 count:被替换次数,0为所有 flags:修饰符 | 返回值是修改后的结果字符串 |