正则表达式简绍
概述:正则表达式
正则表达式是文本处理极为重要的技术,用它可以对字符串按照某种规则进行检索,替换.
正则表达式应用及其广泛,shell中处理文本的命令,各种高级编程语言都支持正则表达式.
正则表达式 Regular Expression,缩写regex, regexp ,RE等.
分类
1.BRE
基本正则表达式,grep,sed,vi等软件支持.vim有扩展.
2.ERE
扩展正则表达式,egrep, sed -r等.
3.PCRE
几乎所有高级语言都是PCRE的方言或者变种.
基本语法
元字符 metacharacter
转义 凡是在正则表达式中有特殊意义的符号,如果使用它的本意,请使用\转义.
反斜杠自身,得使用\ \r \n还是转义后代表回车,换行
贪婪与非贪婪
默认是贪婪模式,也就是说尽量多匹配更长的字符串,
非贪婪很简单,在重复的符号后面加上一个?问号,就尽量的少匹配了.
单行模式:
. 可以匹配所有的字符, 包括换行符.
^ 表示整个字符串的开头, &整个字符串的结尾
多行模式:
. 可以匹配除了换行符之外的字符,多行不影响.点号
^ 表示行首, &行尾, 只不过这里的行是每一行
默认模式:可以看做待匹配的文本是一行, 不能看做多行, .点号不能匹配换行符, ^和&表示行首和行尾, 而行首行尾就是整个字符串的开头和结尾.
单行模式:基本和默认模式一样,只是.点号终于可以匹配任意一个字符包括换行符,这时所有文本就是一个长长的只有一行的字符串. ^就是这一行字符串的行首, &就是这一行的行尾.
多行模式:重新定义了行的概念, 但不影响.点号的行为, ^和&还是行首行尾的意思,只不过因为多行模式可以识别换行符.开始指的是\n后紧接着下一个字符;结束指的是\n前的字符,注意最后一行可以没有\n
re模块
re.M多行模式
re.S单行模式
re.I忽略大小写
re.X忽略表达式中的空白字符
使用 | 位或运算开启多种选项
方法
编译
re.compile(pattern, flag=0)
设定flags, 编译模式,返回正则表达式对象regex
pattern就是正则表达式字符串, flags是选项,正则表达式需要被编译,为了提高效率,这些编译后的结果被保存,下次使用同样的pattern的时候,就不需要再次编译.
单次匹配
re.match(pattern, string, flags=0)
match匹配从字符串的开头匹配,regex对象match方法可以重设开始位置.发挥match对象
从头搜索直到第一个匹配,regex对象seach()方法可以重设开始位置和结束位置,返回macth对象.
全局搜索
对整个字符串, 从左至右匹配,返回匹配项的列表.
匹配替换
使用pattern对字符串string进行匹配,对匹配使用repl替换.
replacement可以是string, bytes, function.
分割字符串
字符串的分割函数split,太难用, 不能指定多个字符进行分割.
分组
使用小括号的pattern捕获的match对象; findall返回字符串列表; finditer返回一个个match对象
如果pattern中使用了分组,如果有匹配的结果, 会在match对象中.
1.使用group()方式返回对应分组,1到n是对应的分组, 0返回整个匹配的字符串, N不写缺省为0.
2.如果使用了命名分组,可以使用group的方式取分组
3.也可以使用group返回所有组.
4.使用groupdict()返回命名的分组.