re 模块的使用:

1.使用compile()函数编译一个parttern对象, 例如:parttern=re.compile(r'\d+')

2.通过pattern对象提供的一系列属相和方法,对文本进行匹配查找,获得结果,即一个Match对象

  • match 方法:从起始位置开始查找,一次匹配,匹配失败返回None ----------> match(string[, pos[, endpos]])

    m = pattern.match('one12twothree34four', 3, 10) # 从下标3开始,也即从字符串'1'的位置开始匹配,返回一个Match对象, 没有匹配到的话返回None
  • # -*- conding:utf-8 -*-
    
    import re
    
    pattern = re.compile(r'([a-z]+) ([a-z]+)', re.I)  # re.I 表示忽略大小写
    m = pattern.match("hello world wide web python") print(m) # <_sre.SRE_Match object; span=(0, 11), match='hello world'>
    print(m.group(), type(m.group())) # hello world <class 'str'>
    print(m.group(1)) # hello
    print(m.group(2)) # world
    print(m.span(), type(m.span())) # (0, 11) <class 'tuple'>
    print(m.groups(), type(m.groups())) # ('hello', 'world') <class 'tuple'>
  • search 方法:从任何位置开始查找,一次匹配,匹配失败返回None  ---------->  search(string[, pos[, endpos]])   使用同match方法
  • findall 方法:全部匹配,返回列表,匹配失败返回空列表  ----------> findall(string[, pos[, endpos]])
  • # -*- conding:utf-8 -*-
    
    import re
    
    # 将正则表达式编译成pattern对象
    pattern = re.compile(r'\d+') # 查找数字
    rel1 = pattern.findall('hello 123 world 456 ')
    print(rel1) # ['123', '456'] rel2 = pattern.findall('one12two23s34f45f56s78e89t10', 10, 20) # 指定匹配的起止位置
    print(rel2) # ['34', '45', '56'] #re模块提供一个方法叫compile模块,提供我们输入一个匹配的规则
    #然后返回一个pattern实例,我们根据这个规则去匹配字符串
    pattern2 = re.compile(r'\d+\.\d*')
    #通过partten.findall()方法就能够全部匹配到我们得到的字符串
    result = pattern2.findall("123.141593, 'bigcat', 232312, 3.15")
    #findall 以 列表形式 返回全部能匹配的子串给result
    print(result) # ['123.141593', '3.15']
  • finditer 方法:全部匹配,返回迭代器 ,返回Match对象 ----------> finditer(string[, pos[, endpos]])
  • # -*- conding:utf-8 -*-
    
    import re
    
    '''finditer跟findall类似'''
    
    pattern = re.compile(r'\d+')
    resl = pattern.finditer('hello-123-world-456-python-789') print(resl) # <callable_iterator object at 0x0000022A886FD470>
    print(type(resl)) # <class 'callable_iterator'> # 迭代器对象
    for m in resl: # m是Match对象, 具体操作见上面的match
    print(m.group()) # 分别打印出123 456 789
  • split 方法:分割字符串,返回列表  ---------->  split(string[, maxsplit])
  • # -*- conding:utf-8 -*-
    
    import re
    
    '''split方法按照规则将字符串分割后返回列表'''
    p = re.compile(r'[\s\,;\t\n]+')
    print(p.split(' a , bwf ;; c ')) # ['', 'a', 'bwf', 'c', '']
  • sub 方法:替换   ---------->  sub(repl, string[, count])
  • # -*- conding:utf-8 -*-
    
    import re
    
    p = re.compile(r'(\w+) (\w+)')
    s = 'hello 1236 hello 456'
    print(p.sub('hello world', s)) # hello world hello world

3.使用match对象的属相和方法获取信息

match.group()

match.groups()  # 匹配的所有  等同于 match.group()等同于match.group(0)

match.start()  # 开始位置

match.end()  # 结束位置

match.span()  # 返回开始结束的区域跨度

4、匹配中文

中文的Unicode编码范围主要在[u4e00-u9fa5],没有包括全角中文标点,不过大部分情况下是够用了

# -*- conding:utf-8 -*-

import re

title = '你好,python , 你好,世界 hello world'
pa = re.compile(r'[\u4e00-\u9fa5]+')
t = pa.findall(title)
print(t) # ['你好', '你好', '世界']

5、贪婪匹配-------非贪婪匹配:python默认是贪婪匹配

  贪婪匹配:在匹配成功的前提下,尽可能多的匹配(*)

  非贪婪匹配:在匹配成功的前提下,尽可能少的匹配(?)

# -*- conding:utf-8 -*-

import re

s = 'abbbbbbdsddbbbb'

res = re.findall('ab*', s)  # *号是匹配前一个字符0次或无限次
print(res) # ['abbbbbb'] 匹配ab后已经匹配成功,但是由于是贪婪匹配,所以会继续往后尝试匹配 res2 = re.findall('ab*?', s)
print(res2) # ['a'] 匹配a成功后,由于是非贪婪匹配,所以匹配就结束了

加油,一步一步往下走,坚持下去,自己给自己打气加油,workon

python——re模块(正则表达式)的更多相关文章

  1. Python re模块 正则表达式

    1 简介 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C ...

  2. Python re模块正则表达式

  3. Python::re 模块 -- 在Python中使用正则表达式

    前言 这篇文章,并不是对正则表达式的介绍,而是对Python中如何结合re模块使用正则表达式的介绍.文章的侧重点是如何使用re模块在Python语言中使用正则表达式,对于Python表达式的语法和详细 ...

  4. python的re正则表达式模块学习

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

  5. Python之re模块 —— 正则表达式操作

    这个模块提供了与 Perl 相似l的正则表达式匹配操作.Unicode字符串也同样适用. 正则表达式使用反斜杠" \ "来代表特殊形式或用作转义字符,这里跟Python的语法冲突, ...

  6. Python中的re模块--正则表达式

    Python中的re模块--正则表达式 使用match从字符串开头匹配 以匹配国内手机号为例,通常手机号为11位,以1开头.大概是这样13509094747,(这个号码是我随便写的,请不要拨打),我们 ...

  7. python常用模块(1):collections模块和re模块(正则表达式详解)

    从今天开始我们就要开始学习python的模块,今天先介绍两个常用模块collections和re模块.还有非常重要的正则表达式,今天学习的正则表达式需要记忆的东西非常多,希望大家可以认真记忆.按常理来 ...

  8. python模块 re模块与python中运用正则表达式的特点 模块知识详解

    1.re模块和基础方法 2.在python中使用正则表达式的特点和问题 3.使用正则表达式的技巧 4.简单爬虫例子 一.re模块 模块引入; import re 相关知识: 1.查找: (1)find ...

  9. Python全栈 正则表达式(概念、、语法、元字符、re模块)

    前言:        普通人有三件东西看不懂:医生的处方,道士的鬼符,程序员得正则表达式       什么是正则表达式? 正则表达式,又称规则表达式,英文名为Regular Expression,在代 ...

  10. 【Python开发】Python之re模块 —— 正则表达式操作

    Python之re模块 -- 正则表达式操作 这个模块提供了与 Perl 相似l的正则表达式匹配操作.Unicode字符串也同样适用. 正则表达式使用反斜杠" \ "来代表特殊形式 ...

随机推荐

  1. OAuth2.0最简向导

    无论你是否有技术背景,你都能看懂授权协议框架OAuth2.0 翻译来自:川崎高彦对自己投资人讲解自己的SaaS安全产品. Got it! https://medium.com/@darutk/the- ...

  2. 服务器出现 nginx 502 Bad Gateway

    发生原因1.PHP FastCGI进程数不够用 当网站并发访问巨大时,php fastcgi的进程数不有一定的保障,因为cgi是单线程多进程工作的,也就是说cgi需要处理完一个页面后再继续下一个页面. ...

  3. restful api 错误

    简介 随着移动开发和前端开发的崛起,越来越多的 Web 后端应用都倾向于实现 Restful API.Restful API 是一个简单易用的前后端分离方案,它只需要对客户端请求进行处理,然后返回结果 ...

  4. php+ajax+jquery实现jsonp跨域

    我们有这么个html文件test.html: 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...

  5. VF 查表

    题目的意思就是 给你一个数字 n (1~81)  然后问你从 1~10^9  之中有多少个 各位数字之和等于 n 的 数字 我上去   打表了  而且速度还差不多 , 能在 几十分钟内算出来所有答案 ...

  6. hdu2032

    http://acm.hdu.edu.cn/showproblem.php?pid=2032 #include<stdio.h> #include<math.h> #inclu ...

  7. Shell脚本,简单& 强大

      摘自<码农增刊Linus与Linux>,章节:你可能不知道的Shell.   最近阅读完这本书,觉得其中有很多不错的内容,这是其中的一个Shell小甜点,拿来和大家一起分享一下,增加了 ...

  8. .net 反射初体验

    一.获取对象中的所有属性 Type是.net定义的一个反射的类.通过反射获取到对象的所有属性,然后根据属性获取对象对应属性所对应的值. 使用PropertyInfo,请引用命名空间using Syst ...

  9. Objective-C设计模式——适配器Adapter(接口适配)

    适配器模式 适配器模式通俗来讲,其实就是对客户端添加新的类但却不修改客户端和新的类的接口.此时我们需要自己来实现适配,在适配器模式中有Target对象,即客户端所需要的接口对象,Adaptee对象,即 ...

  10. 联想 K5 Pro(L38041)免解锁BL 免rec 保留数据 ROOT Magisk Xposed 救砖 ZUI 5.0.188

    >>>重点介绍<<< 第一:本刷机包可卡刷可线刷,刷机包比较大的原因是采用同时兼容卡刷和线刷的格式,所以比较大第二:[卡刷方法]卡刷不要解压刷机包,直接传入手机后用 ...