当前位置 : 主页 > 编程语言 > python >

python与正则表达式(part5)--re模块使用

来源:互联网 收集:自由互联 发布时间:2022-06-15
文章目录 ​​re模块使用​​ ​​compile​​ ​​举个例子​​ ​​findall​​ ​​re.findall(re模块下的findall方法)​​ ​​举个例子1​​ ​​举个例子2(compile对象调用findall())​​ ​


文章目录

  • ​​re模块使用​​
  • ​​compile​​
  • ​​举个例子​​
  • ​​findall​​
  • ​​re.findall(re模块下的findall方法)​​
  • ​​举个例子1​​
  • ​​举个例子2(compile对象调用findall())​​
  • ​​regex.findall(正则表达式对象regex的findall方法)​​
  • ​​举个例子​​




re模块使用

compile

regex = compile(pattern,flags = 0)
功能: 生成正则表达式对象
参数: pattern 正则表达式
flags 功能标志位,用于扩展正则表达式的匹配(默认值0表示没有任何扩展)
返回值: 正则表达式对象

备注:扩展是啥呢?比如说,我们有正则表达式【a】,则只能匹配【a】。但如果我们进行了扩展,则我们不仅可以匹配到【a】也可以匹配到【A】.

举个例子

In [32]: regex = re.compile(r'ab')
In [34]: dir(regex)
Out[34]: ['__class__','__copy__','__deepcopy__','__delattr__',
'__dir__','__doc__','__eq__','__format__',
'__ge__','__getattribute__','__gt__','__hash__',
'__init__','__init_subclass__','__le__','__lt__',
'__ne__','__new__','__reduce__','__reduce_ex__',
'__repr__','__setattr__','__sizeof__','__str__',
'__subclasshook__','findall','finditer','flags',
'fullmatch','groupindex','groups','match',
'pattern','scanner','search','split','sub','subn']

备注:dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。

我们可以看到regex对象下的属性/方法和re模块下的很多属性和方法是一样的。

我们看一下,下面这张示意图:
python与正则表达式(part5)--re模块使用_re

findall

re.findall(re模块下的findall方法)

re.findall(pattern,string,flags = 0)
功能: 根据正则表达式匹配目标字符串内容
参数: pattern 正则表达式
string 目标字符串
flags 功能标志位,扩展正则表达式的匹配
返回值: 匹配到的内容列表,如果正则表达式有子组则只能获取到子组对应的内容,不能获取整体对应的内容
举个例子1

代码1:
python与正则表达式(part5)--re模块使用_findall_02

结果输出1:
python与正则表达式(part5)--re模块使用_python_03

代码2:
python与正则表达式(part5)--re模块使用_python_04

结果输出2:
python与正则表达式(part5)--re模块使用_正则表达式_05

则我们看到,若正则表达式中存在子组,则findall只能获取到子组中的内容。

代码3:
python与正则表达式(part5)--re模块使用_re_06

结果输出3:
python与正则表达式(part5)--re模块使用_findall_07

若有多个子组,则匹配出来的每一项都作为一个元组放到列表中,元组中的元素为各个子组。

举个例子2(compile对象调用findall())

代码:
python与正则表达式(part5)--re模块使用_compile_08

输出结果:
python与正则表达式(part5)--re模块使用_compile_09

我们看到,和例子1中用re模块调用的结果完全一样。在我们生成正则表达式regex对象的时候,正则表达式就已经指定了,所以regex.findall()方法就只需要给出被匹配的字符串,而不需要给出正则表达式了。
那么,这俩(re模块的findall()方法和正则表达式对象regex的findall()方法)一样,为啥我可以选择compile对象调用的findall()方法呢?它有啥优势呢? 我们向下翻,继续学习……

regex.findall(正则表达式对象regex的findall方法)

regex.findall(string,pos,endpos)
功能: 根据正则表达式匹配目标字符串内容
参数: string 目标字符串
pos 截取目标字符串的开始匹配位置
endpos 截取目标字符串的结束匹配位置
返回值: 匹配到的内容列表,如果正则表达式有子组则只能获取到子组对应的内容
举个例子

代码:
python与正则表达式(part5)--re模块使用_findall_10

输出结果:
python与正则表达式(part5)--re模块使用_findall_11

可以看到,regex.findall()方法可以截取被匹配对象。此例中,我们截取了被匹配对象中从0到11的位置的字符串,进行正则匹配。

由此可见,正则表达式对象regex的findall方法相比于re模块的findall方法,功能有了进一步的扩展(可以截取被匹配对象……).
我们以findall方法为例,列举了re模块和正则表达式对象使用该方法的不同点与相同点。同时,对于re模块和正则表达式对象的其他方法(他俩重复的方法)而言,我们也可以”举一反三”的思考其相同和不同。

备注:因为re模块和正则表达式对象中很多方法都重复了。所以,在接下来的blog中,我们在进行方法介绍时,就只利用re模块来的方法进行学习了。若想了解这些方法在正则表达式对象中的应用,可以自己试一试。

【文章原创作者:高防cdn http://www.558idc.com/gfcdn.html提供,感恩】
上一篇:python与正则表达式(part7)--re模块使用
下一篇:没有了
网友评论