牛逼的正则表达式(2)---python中的核心函数

前端之家收集整理的这篇文章主要介绍了牛逼的正则表达式(2)---python中的核心函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一、group()和groups()方法

group()方法返回所有匹配对象或者是根据要求返回某个特定的子组。
groups()返回一个包含所有子组的元组。

例如:

m = re.match("([abc])+","abc")
print m.groups()
print m.group()

m.groups() 返回的只有(‘c’,)
m.group() 返回abc

一般,m.group(N) 返回第N组括号匹配的字符。
而m.group() == m.group(0) == 所有匹配的字符,与括号无关。
m.groups() 返回所有括号匹配的字符,以tuple格式。
m.groups() == ( m.group(1),…)

最后解释下,为什么m.group()返回的是c而不是a,因为有个+符号,执行一次或多次,这里会执行3次,返回最后一次的执行结果,所以是c


二、match()和search()匹配字符串

match()函数尝试从字符串的开头对模式进行匹配,如果匹配成功就返回一个匹配对象,如果匹配失败了,就返回None。
search()会检查字符串任意位置的地方给定正则表达式模式的匹配情况。


三、compile编译正则表达式

可以把正则表达式编译成一个正则表达式对象。可以把那些经常使用的正则表达式编译成正则表达式对象,这样可以提高一定的效率。下面是一个正则表达式对象的一个例子:

regex = re.compile("([abc])+")
m = regex.match("abc")
print m.group(1)

四、findall在字符串中搜索所有出现

因为match和search只会匹配一次,匹配到后就返回结果,所以想要匹配所有的时候就用到了findall。

>>> import re
>>> s = "adfad asdfasdf asdfas asdfawef asd adsfas "

>>> reObj1 = re.compile('((\w+)\s+\w+)')
>>> reObj1.findall(s)
[('adfad asdfasdf','adfad'),('asdfas asdfawef','asdfas'),('asd adsfas','asd')]

>>> reObj2 = re.compile('(\w+)\s+\w+')
>>> reObj2.findall(s)
['adfad','asdfas','asd']

>>> reObj3 = re.compile('\w+\s+\w+')
>>> reObj3.findall(s)
['adfad asdfasdf','asdfas asdfawef','asd adsfas']

按以上代码例子讲解:

findall函数返回的总是正则表达式在字符串中所有匹配结果的列表,此处主要讨论列表中“结果”的展现方式,即findall中返回列表中每个元素包含的信息。

@1.当给出的正则表达式中带有多个括号时,列表的元素为多个字符串组成的tuple,tuple中字符串个数与括号对数相同,字符串内容与每个括号内的正则表达式相对应,并且排放顺序是按括号出现的顺序。

@2.当给出的正则表达式中带有一个括号时,列表的元素为字符串,此字符串的内容与括号中的正则表达式相对应(不是整个正则表达式的匹配内容)。

@3.当给出的正则表达式中不带括号时,列表的元素为字符串,此字符串为整个正则表达式匹配的内容


五、finditer返回迭代器

>>> s=’111 222 333 444’
>>> for i in re.finditer(r’\d+’,s ):
print i.group(),i.span() #打印每次得到的字符串和起始结束位置

结果是

111 (0,3)
222 (4,7)
333 (8,11)
444 (12,15)

re.finditer返回的是一个匹配对象的集合,相当于match多次,把多次结果组装成一个迭代器


六、split多个字符分割

python中字符串自带的split方法一次只能使用一个字符对字符串进行分割,但是python的正则模块则可以实现多个字符分割。

import re
re.split('-|_','sharejs_haotu-icon100')

输出结果如下:

['sharejs','haotu','icon100']

七、sub/subn替换功能

sub和subn都是将某字符串中所有匹配正则表达式模式的部分进行替换,不同的是,subn还返回一个表示替换次数的数字,替换后的字符串和表示替换次数的数字作为一个元组的元素返回。
用来替换的部分通常是一个字符串,但也可能是一个函数,该函数返回一个用来替换的字符串。

re.sub共有五个参数。

其中三个必选参数:pattern,repl,string

两个可选参数:count,flags

  • pattern:匹配模式
  • repl:被替换的字符串
  • string:要被替换的字符串
  • count:替换次数

    >>> re.sub('[abc]','o','Mark') 
    'Mork'

猜你在找的正则表达式相关文章