python学习笔记(五)正则表达式的基本语法和re模块API

正则表达式语法

1,‘[ ]’字符集合设定符

由一对方括号括起来的字符,表明一个字符集合,能够匹配包含在其中的任意一个字符。比如[abc123],表明字符’a’‘b’ ‘c’ ‘1’ ‘2’ ‘3’都符合它的要求。可以被匹配。
’[‘‘]’中还可以通过 ’-‘减号来指定一个字符集合的范围,比如可以用[a-zA-Z]来指定所以英文字母的大小写,不可以把大小的顺序颠倒了。
如果在’[‘‘]’里面的开头写一个 ‘^’号,则表示取非,即在括号里的字符都不匹配。如[^a-zA-Z]表明不匹配所有英文字母。但是如果 ‘^’不在开头,则它就不再是表示取非,而表示其本身,如[a-z^A-Z]表明匹配所有的英文字母和字符’^’

 

2,‘|’或规则

将两个规则并列起来,以‘|’连接,表示只要满足其中之一就可以匹配。比如 
[a-zA-Z]|[0-9]
表示满足数字或字母就可以匹配,这个规则等价于[a-zA-Z0-9] 

其中(?:dog|cat)是一个无捕获组

3,无捕获组

       将一部分规则作为一个整体,对它进行特定的操作,如下是找dogcat


执行结果如下:



4,‘.’匹配除\n以外的所有字符

如下:


运行结果如下:



‘^’和‘\A’匹配字符串首

‘$’和‘\Z’匹配字符串尾

‘\d’匹配数字‘\D’不匹配数字

‘\W’匹配字母和数字         等价于[a-zA-Z0-9]

‘\S’匹配间隔符              等价于[\t\r\n\f\v]

‘\b’匹配单词边界

\b’匹配一个单词的边界,比如空格等,不过它是一个‘0’长度字符,它匹配完的字符串不会包括那个分界的字符。

\s’匹配会匹配出的字符串中会包含那个分界符。

\B’匹配非边界


运行结果如下;


注意:bc的前后有空格

5,精确匹配和最小匹配

1. ‘{m}’精确匹配m;‘{m,n}’匹配最少m次,最多n次。(n>m)

2.如果你只想指定一个最少次数或只指定一个最多次数,你可以把另外一个参数空起来。


运行结果:{3}并不是精确找出三位数,而是找出所有出现够三次的数,{1,4}并不是一位数到4位数,而是两位数到四位数


6,前向(非)界定与后向(非)界定

有时候需要匹配一个跟在特定内容后面的或者在特定内容前面的字符串,Python提供一个简便的前向界定和后向界定功能,或者叫前导指定和跟从指定功能。它们是: 
‘(?<=…)’
前向界定 
括号中’…’代表你希望匹配的字符串的前面应该出现的字符串。 
‘(?=…)’
后向界定 
括号中的’…’代表你希望匹配的字符串后面应该出现的字符串。

‘(?< !…)’前向非界定
只有当你希望的字符串前面不是’…’的内容时才匹配 
‘(?!…)’
后向非界定 
只有当你希望的字符串后面不跟着’…’内容时才匹配。


运行结果:



7组

       7.1‘()’无命名组

      最基本的组是由一对圆括号括起来的正则式。

       7.2‘(?p…)命名组’

(?P’代表这是一个Python的语法扩展’<…>’里面是你给这个组起的名字,比如你可以给一个全部由数字组成的组叫’num’,它的形式就是’(?P\d+)’ {’(?P<num>\d+)’}。起了名字之后,我们就可以在后面的正则式中通过名字调用这个组,它的形式是‘(?P=name)’ 调用已匹配的命名组。

要注意,再次调用的这个组是已被匹配的组,也就是说它里面的内容是和前面命名组里的内容是一样的。 

s=’aaa111aaa,bbb222,333ccc,444ddd444,555eee666,fff777ggg’ 
我们看看下面的正则式会返回什么样的结果: 
re.findall( r’([a-z]+)\d+([a-z]+)’ , s ) #
找出中间夹有数字的字母 [(‘aaa’, ‘aaa’), (‘fff’, ‘ggg’)] 
re.findall( r ‘(?P[a-z]+)\d+(?P=g1)’ , s ) #找出被中间夹有数字的前后同样的字母 [‘aaa’] 
re.findall( r’[a-z]+(/d+)([a-z]+)’ , s ) #找出前面有字母引导,中间是数字,后面是字母的字符串中的中间的数字和后面的字母 [(‘111’, ‘aaa’), (‘777’, ‘ggg’)]

我们可以通过命名组的名字在后面调用已匹配的命名组,不过名字也不是必需的。

7.3\number’通过序号调用已匹配的组

正则式中(并不能使用在sub函数中)的每个组都有一个序号,序号是按组从左到右,1开始的数字,你可以通过下面的形式来调用已匹配的组 

re.findall(r’([a-z]+)\d+\1’ , s ) 
[‘aaa’] 
结果是一样的。 
再看一个例子 
s=’111aaa222aaa111 , 333bbb444bb33’ 

re.findall( r’(\d+)([a-z]+)(\d+)(\2)(\1)’ , s ) #找出完全对称的数字-字母-数字-字母-数字中的数字和字母 
[(‘111’, ‘aaa’, ‘222’, ‘aaa’, ‘111’)]

Python正则库API及模式

reAPI中,一般都有flags参数,通过该参数指定正则表达式选项。传递时一般使用简写,比如开启DOTALLMULTILINE使用re.I|re.M


API:

re.compile(pattern, flags=0)                预编译一个正则表达式,返回一个表达式对象(Regular Expression Objects)
re.search(pattern, string, flags = 0)       在字符串中找匹配的串,返回第一个匹配到的匹配对象
re.match(pattern, string, flags=0)          从头开始匹配,返回匹配对象
re.split(pattern, string, maxsplit=0, flags=0)  使用pattern分割字符串,返回一个结果list
re.findall(pattern, string, flags=0)        search加强版,返回所有的匹配对象的list
re.finditer(pattern, string, flags=0)       返回一个迭代器,用户可以使用迭代器查看所有匹配对象
re.sub(pattern, repl, string, count=0, flags=0)  使用repl替换string中pattern匹配到的部分;
                                                 这里repl可以是一个函数,参数是匹配对象,返回要替代的串
re.subn(pattern, repl, string, count=0, flags=0) 类似sub,返回元组(new_string, number_of_subs_made)
re.escape(string)                           将所有的非字母数字字符前加"\"后返回
re.purge()                                  清空正则表达式缓存

表达式API(Regular Expression Objects)
flags                                       编译时的flag
groups                                      表达式中分组的数量
groupindex                                  以有别名的组别名为键、编号为值的字典
pattern                                     编译时用的表达式字符串
search(string[, pos[, endpos]])             从Pos处开始查找字符串,返回匹配对象
match(string[, pos[, endpos]])              从Pos处匹配字符串,返回匹配对象
split(string, maxsplit=0)                   同re.split
findall(string[, pos[, endpos]])            从Pos处查找所有匹配的字符串,返回所有匹配对象的list
finditer(string[, pos[, endpos]])           从Pos处查找所有的字符串,返回一个迭代器
sub(repl, string, count=0)                  同re.sub
subn(repl, string, count=0)                 同re.subn

匹配对象API(Match Objects)
pos                     传递给函数的pos
endpos                  传递给函数的endpos
lastindex               最后一个捕获的group的下标
lastgroup               最后一个捕获的group的名字
re                      调用match或者search的表达式对象
string                  match或者search的字符串
expand(template)        将匹配到的分组代入template中然后返回。template中可以使用\id或\g<id>、\g<name>引用分组
                        注意0不能使用,另外\10将被认为是第10个分组,如果你想表达\1之后是字符'0',只能使用\g<1>0。
group([group1, ...])    获得一个或多个分组截获的字符串;指定多个参数时将以元组形式返回,0代表整个匹配串
groups([default])       以元组形式返回全部分组截获的字符串,相当于调用group((1,2,…n))
groupdict([default])    返回以有别名的组的别名为键、以该组截获的子串为值的字典
start([group])          返回指定组的串在原串中的起始索引
end([group])            返回指定组的串在原串中的结束索引
span([group])           返回(start(group), end(group))




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您想了解Python正则表达式re模块。re模块Python的标准库之一,用于处理正则表达式正则表达式是一种用于匹配和搜索文本的模式,它可以用来检查字符串是否符合特定的格式,或者从字符串中提取想要的信息。 re模块提供了一系列函数和方法来操作正则表达式,包括: - re.compile(pattern, flags):编译正则表达式,返回一个正则表达式对象。 - re.search(pattern, string, flags):在字符串中搜索匹配正则表达式的第一个位置,返回一个匹配对象。 - re.match(pattern, string, flags):从字符串开头开始匹配正则表达式,返回一个匹配对象。 - re.findall(pattern, string, flags):返回字符串中所有匹配正则表达式的子串列表。 - re.sub(pattern, repl, string, count=0, flags=0):用指定的替换字符串替换字符串中所有匹配正则表达式的子串,返回替换后的字符串。 其中,pattern参数是正则表达式,string参数是要匹配的字符串,flags参数是可选的标志,用来控制正则表达式的行为。 例如,下面的代码展示了如何使用re模块来匹配一个简单的正则表达式: ```python import re text = 'Hello, World!' pattern = r'Hello' match = re.search(pattern, text) if match: print('Match found:', match.group()) else: print('No match') ``` 输出结果为: ``` Match found: Hello ``` 以上就是Python正则表达式re模块的基本介绍,希望能帮到您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值