正则表达式概念
正则表达式,或者叫规则表达式,全称Regular Expression,在代码中常简写为regex、regexp或RE.
python中正则和其他语言中一样,本质上是对re语言的封装模块进行调用
元字符
元字符有以下:
. ^ $ * + ? { } [ ] | ( ) \
通配符.
.代指任意一个字符,除了\n换行符
import re
>>> strs = 'helloworld'
>>> re.findall('h...o',strs) # 用了3个. 成功
['hello']
>>> re.findall('h..o',strs) # 用2个. 则失败,说明1个点只能指代1个字符
[]
尖角符/乘方符/插入符 ^
^指从第一个字符匹配
>>> re.findall('^h...o',strs) # h为第一个字符开始匹配,成功匹配
['hello']
>>> re.finall('^e..o',strs) # 从e开始匹配,则失败
[]
美元符/dollar符 $
$指从最后一个字符匹配
>>> re.findall('w...d$',strs) # d最后一个字符,成功匹配
['world']
>>> re.finall('w..l$',strs) # l不是最后一个字符,匹配到l,则失败
[]
星号 *
$从0个至无穷个字符匹配
>>> strs = 'hello'
>>> re.findall('he..o',strs) # 用.时,匹配几个l就需要用几个点
['hello']
>>> strs = 'ellllllo'
>>> re.findall('e......o',strs) # 6个l需要6个点,多个字符时不够方便
['ellllllo']
>>> re.findall('e.*o',strs) # 此时可以用*替代.来匹配后面的多个字符
['ellllllo']
>>> re.findall('e.*',strs) # e.*表达了e后面字符的0到无穷个
['ellllllo']
>>> re.findall('el*',strs) # l* 匹配了所有l
['ellllll']
>>> re.findall('e*',strs) # e* 后面没有其他e,即是0个,则*会匹配为空,e后有7个字符,则有8个空
['e', '', '', '', '', '', '', '', '']
>>> re.findall('l*o',strs) # 匹配了o前面所有的l
['llllllo']
加号 +
$至少1个至无穷个字符匹配
>>> strs = 'elllllolo'
>>> re.findall('l+o',strs) # 出现了2种结果,1个指代了1个l,1个指代了5个l
['lllllo', 'lo']
>>> re.findall('lo+',strs) # 此时匹配为l后1个字符o,则结果为lo
['lo', 'lo']
问号 ?
$ 只有0个到1个字符匹配
>>> strs = 'lllllo'
>>> re.findall('l?',strs) # 只匹配0到1个l,第一个o时不匹配,则为空值0,整体不匹配为1个空值0
['l', 'l','l', 'l', 'l', '', '']
花括号{}
{}重复匹配
>>> strs = 'llllllo'
>>> re.findall('l{6}') #l匹配重复6次
['lllll']
>>> re.findall('l{3}') # l重复匹配3次
['lll','lll']
>>> re.findall('l{7}') # strs字符串中6个l,匹配重复7次l时则没有匹配的项
[]
小结:
*等价于{0, ∞}
+等价于{1,∞}
?等价于{0, 1 }
{n}为重复次数匹配
.匹配除\n换行符外所有字符
^从开始匹配
$匹配到结束