在网上总是很难找到令自己比较满意的,关于正则表达式的文章。所以决定自己来总结一波,并配上相应的示例。

正则表达式:定义了规则,用来字符串处理。

用途:

1、匹配 - 符合规则的字符串,则认为匹配了。

2、提取 - 提取出符合规则的字符串。

python中通过re模块来处理正则表达式。re模块的常用方法如下:

re.match(re规则,字符串):从头开始匹配。从字符串的第一个字符开始匹配,如果第一个字符不匹配规则,那么匹配失败。

re.search(re规则,字符串):匹配包含。不要求从字符串的第一个字符就匹配。只要字符串当中有匹配该规则的,则就匹配成功。

re.findall(re规则,字符串):把所有匹配的字符放在列表中并返回。

re.sub(re规则,替换串,被替换串):匹配字符并替换。

正则表达式常用的规则如下:

下面一一示例来说明:

'.' : 是只匹配一个字符(除了\n)

  如字符串a="hello123world!!" , 那么'.'匹配到的结果为:"h" .从字符串a中搜索,搜索什么呢,符合规则'.'的数据。

1 >>> import re   #导入正则模块
2 >>> re.search('.','hello123world!!')   #使用search方法
3 <_sre.SRE_Match object; span=(0, 1), match='h'>  #匹配成功,返回了一个匹配对象。匹配的结果为:h      match=表示匹配到的结果

'^' : 匹配字符串的开头。指定字符串必须以什么开头,如果不一样,则匹配失败。

  如字符串a="hello123world!!" , 那么'^h'匹配到的结果为:"h" .如果是'^F'则匹配失败

1 >>> re.search('^h','hello123world!!')
2 <_sre.SRE_Match object; span=(0, 1), match='h'>   #匹配以h开头的字符串,匹配成功,匹配结果为:h
3 >>> re.search('^F','hello123world!!')
4 >>>                      #匹配失败,为None

re.match方法也是从字符串开头匹配。所以与^效果一样:

1 1 >>> re.match('h','hello123world!!')
2 2 <_sre.SRE_Match object; span=(0, 1), match='h'>    #匹配以h开头的字符串,匹配成功,匹配结果为:h
3 3 >>> re.match('F','hello123world!!')
4 4 >>>    #匹配失败,没有输出

'$':指定字符串以$前的字符结尾 。

1 >>> re.search('!$','hello123world!!')
2 <_sre.SRE_Match object; span=(14, 15), match='!'>  #匹配以!结尾的字符串,匹配成功,匹配结果为:!

4 >>> re.search('D$','hello123world!!')
5 >>>     #匹配以D结尾的字符串,失败

'*':表示匹配前面的字符 0次 或者 多次

'+':表示匹配前面的字符 1次 或者 多次

以上的所有匹配都只是匹配到了一个字符。那这两个匹配符则可以匹配多次。

1 >>> re.search('lll*','hello123world!!')
2 <_sre.SRE_Match object; span=(2, 4), match='ll'>  #*可以匹配到至于2个l
3
4 >>> re.search('lll+','hello123world!!')
5 >>>    # +至少要匹配三个l   所以匹配失败

如果我想要指定匹配次数呢? -----

'{m} ':指定匹配前面字符的次数。

1 >>> re.search('el{2}','hello123world!!')
2 <_sre.SRE_Match object; span=(1, 4), match='ell'>  #匹配l两次
3 >>>
4 >>> re.search('el{3}','hello123world!!')   #匹配l三次 ,匹配失败
5 >>>
6 >>> re.search('el{1}','hello123world!!')
7 <_sre.SRE_Match object; span=(1, 3), match='el'>  #匹配l一次

如果只考虑匹配 0次 或者 1次呢 ---

'?':表示匹配前面的字符 0次 或者 1次

1 >>> re.search('el?','hello123world!!')
2 <_sre.SRE_Match object; span=(1, 3), match='el'>  #?匹配l 0次或者 1次
3 >>>
4 >>> re.search('ello7?','hello123world!!')
5 <_sre.SRE_Match object; span=(1, 5), match='ello'> #? 匹配7 0次或者1次

第一波总结到这里打止。。欢迎留言和交流。


												

re模块 - 正则表达式 疏理(一)的更多相关文章

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

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

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

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

  3. sys,os,模块-正则表达式

    # *__conding:utf-8__* """"我是注释""" sys,os模块 import sysimport os pr ...

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

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

  5. Python re模块 正则表达式

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

  6. s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译

    时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...

  7. re 模块 正则表达式

    re模块(正则表达式)   一.什么是正则表达式 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则.(在Python中)它 ...

  8. Python3 re模块(正则表达式)

    一:什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. (在Python中)它内嵌在Python中,并通过r ...

  9. re模块正则表达式

    regular expression / regex / RE 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配.Python 自1.5版本起增加了re 模块,它提供 ...

随机推荐

  1. BAT面试题:使用数组实现一个简单的阻塞队列

    这道题是我亲身经历的一道大厂面试题,非常值得分享! 这道题可以分为两个步骤进行编码解答,第一步是基于数组实现一个队列,第二步是实现线程阻塞. 如果是基于数组实现栈的数据结构,那么我们只需要一个指针进行 ...

  2. dedecms织梦的不同栏目调用不同banner图的方法

    在做织梦站的时候我们会有不同的栏目,比如联系我们,产品中心等等,banner也不一样,方法如下: 我们可以使用织梦的顶级栏目ID标签,把图片命名成顶级栏目typeid ,代码如下: <img s ...

  3. Echarts学习之路3(在react中使用)

    安装: npm install echarts --save demo import React, { Component } from 'react'; // 引入 ECharts 主模块 impo ...

  4. Java Web的简单项目部署

    目录 项目介绍 安装并配置jdk和tomcat 安装并配置mysql 使用Eclipse导出war包 部署war包到服务器 导出项目的数据库 将项目的数据库导入服务器的数据库中 修改配置 重启Tomc ...

  5. SpringMVC 实现文件上传与下载,并配置异常页面

    目录 上传文件的表单要求 Spring MVC实现上传文件 需要导入的jar包 配置MultipartResolver解析器 编写接收上传文件的控制器 Spring MVC实现文件下载 下载文件时的h ...

  6. js获取元素宽高、位置相关知识汇总

    常见clientWidth.clientHeight.offsetWidth.offsetLeft,clientX.scrollTop等词语,比较混乱,现在总结下他们的区别. 1. clientWid ...

  7. DAY22、面向对象

    一.复习:1.面向过程与面向对象 过程:程序流程化,可拓展性差 对象:程序流程多样化,可拓展性强 面向对象引入属性 | 方法的概念,通过所属者.语法调用2.拥有名称空间的对象:有__dict__属性, ...

  8. Python——Pyqt5(界面)——基本设置

    一.Pycharm外加设置 设置扩展工具 1.Qt Design(图形界面) Program:工程目录\venv\Lib\site-packages\pyqt5-tools\designer.exe  ...

  9. Nginx CONTENT阶段 autoindex、index模块

    L 66 autoindex 指令 syntax : on | off; default : off; context : http,server,location; autoindex_exact_ ...

  10. 微信小程序工具类

    wechat-common-sdk ? 场景:目前工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想 ...