1、re.findall()函数

语法:re.findall(pattern,string,flags=0) ——> list(列表)

列出字符串中模式的所有匹配项,并作为一个列表返回。如果无匹配,则返回空列表!

与re.search()不一样的地方:re.findall返回的是列表,re.search返回文本

re.findall匹配多个值,re.search只要匹配到就返回,只匹配一个值

>>> import re

>>> re.findall(r"ab","abcaaaab")

['ab', 'ab'] #匹配的值作为一个列表范围

2、re.compile()函数

语法:re.compile(pattern,flags=0) ——> pattern object

根据包含正则表达式的字符串创建模式对象,可以实现更有效率地匹配!用了re.compile以后,正则对象会得到保留,这样在需要多次运用这个正则对象的时候,效率会有较大的提升

此外,re.cpmpile() 可以通过接受可选的属性,常用来实现不同的特殊功能和语法变更。

2.1 例1:使用re.compile(pattern)对正则表达式进行编译

>>> import re

>>> s=r"^010-\d{8}$"

>>> re.findall(s,"010-12345678")

['010-12345678']

>>> p_tel=re.compile(s) #对s这个正则表达式创建模式对象p_tel

>>> p_tel

>>> p_tel.findall("010-12345678") #经过compile转换的正则表达式对象也能用于普通的re函数,跟上面的re.findall(s,"010-12345678")一样的效果

['010-12345678']

2.2 使用re.compile(pattern)进行编译,不区分大小写

>>> import re

>>> s=r"hello"

>>> greeting=re.compile(s,re.I) #re.I 属性让正则表达式忽略大小写!

>>> greeting.findall("HELLO")

['HELLO']

>>> greeting.findall("hello")

['hello']

>>> greeting.findall("hEllo")

['hEllo']

2.3 为什么正则匹配模式前面加 "r"

禁止转义!反斜杠不会被任何特殊方式处理。

Python编译器用‘\’(反斜杠)来表示字符串常量中的转义字符。

如果反斜杠后面跟着一串编译器能够识别的特殊字符,那么整个转义序列将被替换成对应的特殊字符(例如,‘\n’将被编译器替换成换行符)

本质上来讲,使用r,你在告诉编译器完全不要去干涉你的字符串

例如:

>>> string='this is a\nnormal string'

>>> print string

this is a

normal string #不使用r,\n在字符串中代表一个换行符

>>> rawstring=r'this is a\nnormal string'

>>> print rawstring

this is a\nnormal string #使用r,\n在字符串中就是\n

3、re.match()函数

语法:re.match(pattern, string, flags=0) ——> match object or None

在字符串的开始位置匹配正则!如果无匹配,则返回 None 。

>>> import re

>>> s=r"abc"

>>> com=re.compile(s)

>>> com.match("abcdef") #abc在开始的位置,可以匹配

>>> print com.match("hhhabc") #abc不在开始的位置,不可以匹配

None

3.1 使用group()-返回匹配的数据

>>> import re

>>> s=r"abc"

>>> com=re.compile(s)

>>> com.match("abcddddd").group() #使用group()返回匹配的对象

'abc'

4、re.search()函数

语法:re.search(pattern, string, flags=0) ——> match object or None

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

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

>>> import re

>>> s=r"abc"

>>> com=re.compile(s)

>>> com.search("abcdef")

>>> com.search("hhhabc")

<_sre.sre_match object at> #与re.match的区别:无论在哪个位置都能匹配

4.1 使用group()-返回匹配的数据

>>> import re

>>> s=r"abc"

>>> com=re.compile(s)

>>> com.search("abcddd").group() #使用group()返回匹配的对象

'abc'

>>> com.search("abcdddabc").group() #只匹配一个

'abc'

4.2 关于group更多

返回匹配到的一个或者多个子组。如果是一个参数,那么结果就是一个字符串,如果是多个参数,那么结果就是一个参数一个item的元组。

group1的默认值为0(将返回所有的匹配值).如果groupN参数为0,相对应的返回值就是全部匹配的字符串,

如果group1的值是[1…99]范围之内的,那么将匹配对应括号组的字符串。如果组号是负的或者比pattern中定义的组号大,那么将抛出IndexError异常。如果pattern没有匹配到,但是group匹配到了,那么group的值也为None。如果一个pattern可以匹配多个,那么组对应的是样式匹配的最后一个。另外,子组是根据括号从左向右来进行区分的。

>>> s=r"(\w+) (\w+)"

>>> com=re.compile(s)

>>> m=com.search("abc def,222")

>>> m.group() #返回所有的匹配值

'abc def'

>>> m.group(0) #返回所有的匹配值,默认是0

'abc def'

>>> m.group(1) #如果group的值是[1…99]范围之内的,那么将匹配对应括号组的字符串

'abc'

>>> m.group(2)

'def'

>>> m.group(1,2) #如果是一个参数,那么结果就是一个字符串,如果是多个参数,那么结果就是一个参数一个item的元组

('abc', 'def')

>>> m.group(3)

Traceback (most recent call last):

File "", line 1, in

IndexError: no such group #如果组号是负的或者比pattern中定义的组号大,那么将抛出IndexError异常

还可以把使用别的变量值来代替默认的group(N)中的N,如下写法:

>>> import re

>>> m=re.search(r"(?P\w+) (?P\w+)","abc def,222") #?P写法

>>> m.group("one")

'abc'

>>> m.group("two")

'def'

4.3 关于MatchObject(匹配对象) 方法

re.match和re.search都是返回MatchObject,有如下方法group(): 返回被正则匹配的字符串;

start(): 返回匹配开始的位置;

end(): 返回匹配结束的位置;

span(): 返回一个元组包含匹配(开始,结束)的位置。

5、re.finditer()函数

语法:re.finditer(pattern,string,flags=0) ——> iterator

列出字符串中模式的所有匹配项,并作为一个迭代器返回。凡是可作用于for循环的对象都是Iterable类型;

凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

Python的for循环本质上就是通过不断调用next()函数实现的,例如:

for x in [1, 2, 3, 4, 5]:

pass实际上完全等价于:

# 首先获得Iterator对象:

it = iter([1, 2, 3, 4, 5])

# 循环:

while True:

try:

# 获得下一个值:

x = next(it)

except StopIteration:

# 遇到StopIteration就退出循环

break

言归正传,举例如下:

>>> import re

>>> s=r"\d+"

>>> com=re.compile(s)

>>> com.finditer("aa11bb22cc")

>>> it=com.finditer("aa11bb22cc")

>>> for i in it:

... print i #返回一个match对象

... print i.group() #返回匹配的数据

...

11

22

6、re.sub()函数

语法:re.sub(pattern, repl, string, count=0, flags=0) ——> string

将字符串中所有 pattern 的匹配项用 repl 替换!

>>> import re

>>> re.sub(r"abc","123","abcdefabc")

'123def123'

7、re.subn()函数

语法:re.subn(pattern, repl, string, count=0, flags=0)

与sub()实现相同的替换作用,但是subn()返回一个元组,其中包含新字符串和替换次数!

>>> import re

>>> re.subn(r"abc","123","abcdefabc")

('123def123', 2)

8、re.split()函数

语法:re.split(pattern, string, maxsplit=0, flags=0) ——> list

根据模式的匹配项来分割字符串!

>>> import re

>>> re.split(r"\d+","aa11bb22cc") #以正则表达式\d+为分割符

['aa', 'bb', 'cc']

>>> re.split(r"\d","aa11bb22cc") #以正则表达式\d+为分割符

['aa', '', 'bb', '', 'cc']

python 正则表达函数_python笔记-正则表达式常用函数相关推荐

  1. python math库常用函数_Python math库常用函数

    math库常用函数及举例: 注意:使用math库前,用import导入该库 >>> import math 取大于等于x的最小的整数值,如果x是一个整数,则返回x >>& ...

  2. php函数表达式,php正则表达式常用函数介绍

    本文主要介绍如下的php正则匹配函数: preg_match: 字符串比对解析. preg_match_all: 字符串整体比对解析. preg_replace: 字符串比对解析并取代. preg_s ...

  3. python os模块手册_Python OS模块常用函数说明

    Python的标准库中的os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Wi ...

  4. python正则匹配特殊字符_python 利用正则表达式提取特殊信息

    1.删除字符串中的 Python注释 案例: import re time = "2020-01-01 # 这是一个日期" num = re.sub(r'#.*$', " ...

  5. python数据分析函数大全_python中数据分析常用函数整理

    一. apply函数 作用:对 DataFrame 的某行/列应用函数之后,Apply 返回一些值.函数既可以使用默认的,也可以自定义.注意:在第二个输出中应用 head() 函数,因为它包含了很多行 ...

  6. python调用arcpy函数_python笔记之ArcPy函数列表

    函数名称          类别 AcceptConnections 地理数据库管理 AddDataStoreItem 数据存储 AddError 消息和错误处理 AddFieldDelimiters ...

  7. 菜鸟教程python正则表达式_Python正则表达式常用函数菜鸟教程

    这篇文章主要为大家详细介绍了Python正则表达式常用函数菜鸟教程,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! Py ...

  8. python 正则替换_5分钟速览Python正则表达式常用函数!五分钟就掌握它!

    导读:正则表达式是处理字符串类型的"核武器",不仅速度快,而且功能强大.本文不过多展开正则表达式相关语法,仅简要介绍python中正则表达式常用函数及其使用方法,以作快速查询浏览. ...

  9. Python语言学习:Python语言学习之正则表达式常用函数之re.search方法【输出仅一个匹配结果(内容+位置)】、re.findall方法【输出所有匹配结果(内容)】案例集合之详细攻略

    Python语言学习:Python语言学习之正则表达式常用函数之re.search方法[输出仅一个匹配结果(内容+位置)].re.findall方法[输出所有匹配结果(内容)]案例集合之详细攻略 导读 ...

最新文章

  1. 区块链共识算法:PoS即权益证明 DPoS委托授权的权益证明
  2. 最详细的JavaWeb开发基础之java环境搭建(Windows版)
  3. 皮一皮:六神终于出奶茶了!
  4. Fibonacii数列,兔子问题
  5. 自动阈值检测_金融科技讲堂之三|金融企业如何在大数据中进行异常检测(一)...
  6. Layui上传文件时choose事件只触发一次的问题(两种解决方案+最终解决方案源码)
  7. linux用光盘作yum源实验步骤,Linux使用系统光盘作为YUM源
  8. Unix NetWork Programming——环境搭建(解决unp.h等源码编译问题)(转载)
  9. Python内置函数(37)——sorted
  10. 代码编辑器sublime text 4130 for Mac
  11. 当当网推“搜索+个性化”
  12. python爬虫简历项目怎么写_python爬虫简历
  13. Linux 程序编译过程详解
  14. linux一键安装aria2,Linux一键安装Aria2+Yaaw+FileManager实现BT磁力下载,并在线查看/观看...
  15. UMLChina公众号文章精选(20220918更新精选)
  16. 什么是HDMI网线延长器?浅析HDMI1.3网线延长器原理和应用
  17. FTTH网速慢解决方案
  18. CodeBlocks下创建.h .cpp文件
  19. Docker(二十)--Docker k8s--Kubernetes存储--Volumes配置管理
  20. 本地无法打开localhost或127.0.1解决方案

热门文章

  1. 企业如何远程招聘到靠谱的程序员?--Codassium网页视频聊天工具
  2. cartographer 源码解析 (五)
  3. 拿什么来保障程序员的工作?
  4. NOIP 2013 华容道
  5. 阿俊的花(天真版本)
  6. 三、Kubernetes集群的命令行工具kubectl
  7. 拳王虚拟项目公社:小白无脑可操作的自动化虚拟资源项目,虚拟资源自动发货的实操玩法
  8. oracle 权限问题9017,泛微OA 曝出WorkflowCenterTreeData接口注入漏洞(限oracle数据库)
  9. android 模拟返回键
  10. 红旗linux添加usb无线网卡,红旗6.0 怎么安装无线网卡驱动(急)