牛逼的正则表达式(2)---python中的核心函数
一、group()和groups()方法group()方法返回所有匹配对象或者是根据要求返回某个特定的子组。 例如: m = re.match("([abc])+","abc") print m.groups() print m.group() m.groups() 返回的只有(‘c’,) 一般,m.group(N) 返回第N组括号匹配的字符。 最后解释下,为什么m.group()返回的是c而不是a,因为有个+符号,执行一次或多次,这里会执行3次,返回最后一次的执行结果,所以是c 二、match()和search()匹配字符串match()函数尝试从字符串的开头对模式进行匹配,如果匹配成功就返回一个匹配对象,如果匹配失败了,就返回None。 三、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'] 按以上代码例子讲解:
五、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
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |