正则表达式(RE):由字符和特殊符号组成的字符串
常见的符号和字符
记号 说明 样例 literal 匹配字符串的值 foo rel1 **|** rel2 匹配正则表达式rel1或rel2 foo|bar . 匹配任何字符(换行符除外) b.b (1): ^ 匹配字符串的开始 ^Dear $ 匹配字符串的结尾 /bin/*sh$ (2): * 匹配前面出现的正则表达式零次或多次 [A-Za-z0-9] + 匹配前面出现的正则表达式一次或多次 [a-z]+\.com ? 匹配前面出现的正则表达式零次或一次 goo? {N} 匹配前面出现的正则表达式N次 [0-9]{3} {M,N} 匹配重复出现M次到N次的正则表达式 [0-9]{3,5} [...] 匹配字符组里出现的任意一个字符 [aeIoU] [..x-y..] 匹配从字符x到y中的任意一个字符 [0-9],[A-Za-z] [^...] 不匹配此字符集中出现的任何一个字符 [^aeIoU],[^A-Za-z] \c 逐一匹配特殊字符c(即取消它的特殊含义,按字面匹配) \.,\..,\*
(1):^,$,\b,\B
\b:匹配单词边界,不论这个单词前有字符(在一字符串中间)/ 没有字符(在一行起始处)
\B:仅匹配出现在一单词中间的模式
(2):“贪心”
正则表达式在匹配模式时,会尽量“吸收”更多的字符 -> “贪心”
–> ?
? 用在表示重复的元字符后面:表示要求搜索引擎匹配的字符串越短越好,留下尽可能多的字符给后面的模式(如果存在)
(3)特殊字符:
\d 匹配任何数字,和[0-9] 一样。\D 是\d的反义:任何非数字
\w 匹配任何数字字母字符,和[A-Za-z0-9]相同。\W 是\w 的反义
\s 匹配任何空白符,和 [\n\t\r\v\f] 相同。\S 是\s 的反义
(4)
(…) 匹配封闭括号中正则表达式,并保存为自组 (0-9{3})?,f(oo|u)bar
re模块:核心函数和方法
compile(pattern,flags = 0)
对正则表达式模式pattern进行编译,flags是可选标识符,返回一regex对象
group(),groups():
在处理正则表达式时,除regex对象外,还有一:类型-匹配对象 -> 在match() / search() 被成功调用后返回的结果
group() 返回所有匹配对象/根据要求(括号中填入数字)返回某个特定自组 groups() 返回一包含唯一/所有自组的元组 若无:group()返回所有匹配对象,groups()返回一空元组
match(pattern,string,flags = 0)
常使用正则表达式模式pattern匹配字符串string(从开头开始),若匹配成功:返回一匹配对象;否则返回None
>>>m = re.match('(\w\w\w)-(\d\d\d)','abc-123')
>>>m.group()
'abc-123'
>>>m.group(1) #若(a(b)) 则group(1)为先出现的括号(即(ab))
'abc'
>>>m.group(2)
'123'
>>>m.groups()
('abc','123')
>>>patt = '^(\w){3}' # 不等于 (\w)(\w)(\w),group(3)为第三个(\w)
#而此group(1)一直被替换
search(pattern,flags = 0)
搜索,第一次出现, 成功返回一匹配对象,否则返回None
findall(pattern,string [,flags])
搜索,所有出现,成功返回一匹配对象的列表,否则返回一空列表
finditer(pattern,flags])
与findall() 相同,但是finditer() 返回一迭代器,对每个匹配,返回一匹配对象
split(pattern,max = 0)
根据正则表达式pattern中的分隔符,将字符string分割为一列表,返回该列表。最多分割max次(默认全部分割)
sub(pattern,repl,max = 0)
根据正则表达式pattern,搜索string,将匹配该pattern的替换为repl
subn() 与sub()同,返回一元祖 (..,..):替换后的字符串和表示替换次数的数字