专栏首页代码世界Python之re模块

Python之re模块

re模块

在Python中想要使用正则表达式,就需要调用re模块来实现。

在 re 模块下的常用方法:

调用时程序最上面需要写

import re

常用的几个关键字: findall  :re.findall遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。

格式:re.findall(‘前面放要查找的内容’,‘这里放被查找的内容’)

search :re.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None。

                 返回的变量需要调用group才能拿到结果 #,如果没有找到,那么返回None,调用group会报错。

格式:re.search(‘前面放要查找的内容’,‘这里放被查找的内容’) 

match :决定RE是否在字符串刚开始的位置匹配。//注:这个方法并不是完全匹配。当pattern结束时若string还有剩余字符,仍然视为成功。

想要完全匹配,可以在表达式末尾加上边界匹配符'$'。

match是从头开始匹配,如果正则规则从头开始可以匹配上,就返回一个变量。  匹配的内容需要用group才能显示 。 如果没匹配上,就返回None,调用group会报错。

格式: re.match(‘前面放要查找的内容’,‘这里放被查找的内容’)

compile : 只会从开头匹配,如果不是开头的字符串,那么将不会匹配成功。将正则表达式编译成为一个 正则表达式对象。

格式:re.compile

search  :  re.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None。

格式:re.search(pattern, string, flags=0)

*注:match和search一旦匹配成功,就是一个match object对象,而match object对象有以下方法:

  • group() 返回被 RE 匹配的字符串
  • start() 返回匹配开始的位置
  • end() 返回匹配结束的位置
  • span() 返回一个元组包含匹配 (开始,结束) 的位置
  • group() 返回re整体匹配的字符串,可以一次输入多个组号,对应组号匹配的字符串。

a. group()返回re整体匹配的字符串, b. group (n,m) 返回组号为n,m所匹配的字符串,如果组号不存在,则返回indexError异常 c.groups()groups() 方法返回一个包含正则表达式中所有小组字符串的元组,从 1 到所含的小组号,通常groups()不需要参数,返回一个元组,元组中的元就是正则表达式中定义的组。 

finditer:搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器。找到 RE 匹配的所有子串,并把它们作为一个迭代器返回。

格式  :  re.finditer(pattern, string, flags=0)

split :按照能够匹配的子串将string分割后返回列表。可以使用re.split来分割字符串,如:re.split(r'\s+', text);将字符串按空格分割成一个单词列表。

格式:re.split(pattern, string[, maxsplit])

sub : 使用re替换string中每一个匹配的子串后返回替换后的字符串。

re.sub还允许使用函数对匹配项的替换进行复杂的处理。

如:re.sub(r'\s', lambda m: '[' + m.group(0) + ']', text, 0);将字符串中的空格' '替换为'[ ]'。

格式:re.sub(pattern, repl, string, count)

 subn:返回替换次数。

格式:re.subn(pattern, repl, string, count=0, flags=0)

一些注意点:

1、re.match与re.search与re.findall的区别:

re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

a=re.search('[\d]',"abc33").group()
print(a)
p=re.match('[\d]',"abc33")
print(p)
b=re.findall('[\d]',"abc33")
print(b)
执行结果:
None
['3', '3']

2、贪婪匹配与非贪婪匹配

*?,+?,??,{m,n}?    前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配

a = re.findall(r"a(\d+?)",'a23b')
print(a)
b = re.findall(r"a(\d+)",'a23b')
print(b)
执行结果:
['2']
['23']

a = re.match('<(.*)>','<H1>title<H1>').group()
print(a)
b = re.match('<(.*?)>','<H1>title<H1>').group()
print(b)
执行结果:
<H1>title<H1>
<H1>
a = re.findall(r"a(\d+)b",'a3333b')
print(a)
b = re.findall(r"a(\d+?)b",'a3333b')
print(b)
执行结果如下:
['3333']
['3333']
#######################
这里需要注意的是如果前后均有限定条件的时候,就不存在什么贪婪模式了,非匹配模式失效。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 计算机网络基础

    计算机网络的发展及基础网络概念 问题:网络到底是什么?计算机之间是如何通信的? 早期 : 联机 ?  以太网 : 局域网与交换机 ? 广播   主机之间“一对所...

    新人小试
  • 正则表达式

    正则表达式 什么是正则表达式? 正则表达式,又称规则表达式,英文名为Regular Expression,在代码中常简写为regex、regexp或RE,是计算...

    新人小试
  • mac安装虚拟环境python3

    Virtaulenvwrapper是virtualenv的扩展包,可以更方便地新增,删除,复制,切换虚拟环境。

    新人小试
  • 一文搞懂 Python 正则表达式用法

    小小科
  • python学习-re模块

    Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,在文本解析、复杂字符串分析和信息提取时是一个非常有...

    py3study
  • 正则表达式(RegEx)官方手册/权威指南【Python】

    正则表达式(称为RE,或正则,或正则表达式模式)本质上是嵌入在Python中的一种微小的、高度专业化的编程语言,可通过 re 模块获得。 使用这种小语言,你可以...

    sunsky
  • Python学习(二) 正则表达式

    Python正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。re 模块使 Python 语言拥有全部的正则表达式功...

    深度学习思考者
  • 正则表达式_

    版权声明:Copyright © ...

    zhengzongwei
  • Python 学习入门(13)—— 正则表达式

    Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。Python 1.5之前版本则是通过 regex 模块提供 Emacs 风...

    阳光岛主
  • 你不懂的正则

    什么是正则表达式呢? 从名字上来看的话,就是通过正确的法则去匹配的表达式, 比较官方的定义就是,定义模式的字符串,其本质就是字符串,主要是用来匹配目标字符串,已...

    公众号---人生代码

扫码关注云+社区

领取腾讯云代金券