《Python核心编程》读书笔记—正则表达式

来源:互联网 发布:三维地理信息系统软件 编辑:程序博客网 时间:2024/05/19 04:03

正则表达式(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)
在参数中我们传入了原生字符串对象,通过compile方法编译生成一个pattern对象,然后我们利用这个对象来进行进一步的匹配。flags是可选标识符。

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, string, flags = 0)
搜索,第一次出现, 成功返回一匹配对象,否则返回None

findall(pattern, string [,flags])
搜索,所有出现,成功返回一匹配对象的列表,否则返回一空列表

finditer(pattern, string [,flags])
与findall() 相同,但是finditer() 返回一迭代器,对每个匹配,返回一匹配对象

split(pattern, string, max = 0)
根据正则表达式pattern中的分隔符,将字符string分割为一列表,返回该列表。最多分割max次(默认全部分割)

sub(pattern, repl, string, max = 0)
根据正则表达式pattern,搜索string,将匹配该pattern的替换为repl

subn() 与sub()同,返回一元祖 (.. , ..):替换后的字符串和表示替换次数的数字

0 0
原创粉丝点击