正则

  通过re模块实现

  eg:>>>import re

          >>>re.findall('abc',str_name)

  在strname里面完全匹配字符串abc,返回列表['abc'],有多个则返回多个相同的元素,若没有,则返回空列表。优先取出组里面的内容,在小括号开头加上?:就可以去掉优先获取组里内容的权限

元字符

  .  表示匹配单个字符,除了换行符

    re.findall('a.c',djsdsdabcdw')返回列表的元素为abc

  ^  表示以什么开头

    re.findall('^abc','abcoweijdw')返回列表的元素为abc

  $  表示以什么结尾

    re.findall('abc$','elkjfwlabc')返回列表的元素为abc

  *  表示匹配前一个字符零到多次

    re.findall('abc*','efwkabcccccclo')也可以匹配到ab,贪婪匹配,匹配最多次

  +  表示匹配前一个字符一到多次

    re.findall('abc+','sdfabcccdcw')不能匹配到ab,至少匹配到abc

  ?  表示匹配前一个字符零次和一次

    re.findall('abc?','sdabcewwabsef')返回的列表元素是ab和abc

  {}  表示匹配前一个字符n次,数字n放在括号里

    abc{3}只能匹配abccc,也可以写区间{3,5},匹配前面的内容3到5次

  \  后跟元字符,则去除元字符的特殊功能

     后边跟普通字符,则实现特殊功能

    \d 任何十进制数,同[0-9]

    \D 同[^0-9]

    \s 匹配任何空白字符,同[\t\n\r\f\v]

    \S 与\s相反

    \w 同[a-zA-Z0-9]

    \W 与\w相反

    \b 匹配单词边界,分割与特殊字符之间的地方

字符集

  [ ]  a[bc]d 只能匹配abd和acd

     [a-z] [A-Z] [1-9]

  ^  [^1-9] 匹配除了1到9的字符

  ()  (ab)* 匹配ab字符串 零个到多个

  |  或

函数

  re.search('abc','sefabcsefwabc').group()

    只匹配找到的第一个满足的字符串返回,后面就不匹配了,返回的并不是列表,是字符串

  re.findall(r"a(\d+)","a4394dfgr)

    匹配括号里的,返回4394

  re.search(r"a(\d+)","a4394dfgr").group()

    贪婪匹配,返回a4394

  re.search(r"a(\d+?)","a4394dfgr").group()

    非贪婪匹配,返回a4

    可将+换成*。另外括号后面有个限制条件,如a(\d+?)b,这样非贪婪匹配就不起作用了,有无?都是一样的

  re.match(被匹配字符串,匹配字符串,flag)

    其中,flag常用取值:

      re.I 不区分大小写

      re.S 使.匹配包括换行符在内的所有字符

    match匹配到的是一个match对象,需要用group()方法去取匹配的字符串,参数默认为0,取匹配到所有的内容,若是n,则返回第n个组的内容,也就是第n个小括号里匹配到的内容

    groups()方法获取组里的内容,返回一个元组,一个组里的内容就是元组的一个元素

    groupdict()方法,在组内开头加上 ?P<"asdfa">,就能返回一个字典,由自己定义的键“asdfa”和组的内容组成键值对

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

    end() 返回结束位置

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

  re.sub(被替换的字符串,替换成此字符串,str_name,替换次数)

  re.subn(被替换的字符串,替换成此字符串,str_name)

    此方法匹配到的全部替换,在返回的列表最后加一个元素,这个元素是替换的次数

  re.compile()定义一种匹配规则,用来多次调用

    eg:

      regex = re.compile(r'\w*oo\w*')

      print regex.findall(str_name)

实例:

  取算数表达式里最里面的小括号表达式,括号里没有括号的表达式

  re.search("\([^()]\)",表达式).group()

    若最里面有多个小括号表达式,则要加*

    re.search("\([^()]*\)",表达式).group()

  

  匹配一个数,可整型,可浮点型,可1位数,可多位数

  '\d+\.?\d*'

    前面必须为+,至少是一位的数,那么后面必须是*,可为0次,若还是为+,则后面至少还是有一位的,那么整体就至少是二位的数了,中间的?表示匹配浮点型或者不是

  

  两个数运算的表达式

  '\d+\.?\d*([*/]|\*\*)\d+\.?\d*'

    其中,[*/]|\*\*表示乘除幂运算

  匹配ip地址

  "([01]?\d?\d|2[0-4]\d|25[0-5]\.){3}([01]?\d?\d|2[0-4]\d|25[0-5])"

    其中,[01]?\d?\d|2[0-4]\d|25[0-5] 表示从0到199,200到249,250到255

补充:

  re.split("\\\\","abc\xyz")

    后面的字符串中的\在python里面需要转义,其实是\\,所以分割的话,需要用两个\,而需要的两个\又是需要转义的,所以就是\\\\

  re.split(r"\\","abc\xyz")

    前面被匹配的字符串中如果有各种转义字符,会先去python自己里面查看有没有(其中\d没在,其他字符在ASCII里面都有对应的数字),有的话,就按python里对应字符来匹配(若不想按python里面的字符匹配,则前面加一个\,或者在整个匹配字符串前面加一个r),如果没有,就按re模块里定义的特殊功能来匹配(例如\d,可以不用另外加\或者加r,但是尽量加上,按照正确格式来)

python入门之正则表达式的更多相关文章

  1. Python 入门学习(贰)文件/文件夹正则表达式批量重命名工具

    基于 Udacity 的 Python 入门课程 Programming Foundations with Python 基于 Python 2.7 思路 Project 2 是一个去除文件名中所有数 ...

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

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

  3. 老鸟的Python入门教程

    转自老鸟的Python入门教程 重要说明 这不是给编程新手准备的教程,如果您入行编程不久,或者还没有使用过1到2门编程语言,请移步!这是有一定编程经验的人准备的.最好是熟知Java或C,懂得命令行,S ...

  4. Python入门教程(1)

    人生苦短,我用Python! Python(英语发音:/ˈpaɪθən/), 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于19 ...

  5. Python语言学习之Python入门到进阶

    人们常说Python语言简单,编写简单程序时好像也确实如此.但实际上Python绝不简单,它也是一种很复杂的语言,其功能特征非常丰富,能支持多种编程风格,在几乎所有方面都能深度定制.要想用好Pytho ...

  6. Python 入门网络爬虫之精华版

    Python 入门网络爬虫之精华版 转载 宁哥的小站,总结的不错 Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 另外,比较常用的爬虫框架Scrapy,这里最后也详细介绍一下. 首先列举 ...

  7. Python 入门之 内置模块 -- re模块

    Python 入门之 内置模块 -- re模块 1.re 模块 (1)什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类 ...

  8. Python入门到进阶必看的权威书籍与网站

    随着人工智能全面爆发,Python[英文单词:蟒蛇],是一款近年来爆红的计算机编程语言.1989年发明,1991年发行,比目前应用最广的Java还要大7岁,有种大器晚成的感觉. 分享之前我还是要推荐下 ...

  9. Python入门随记(2)

    1.二维列表的声明 [['pygis'],['gis']] 2.CSV格式的本质,是用,作为分隔符. 3.for循环 for -- in -- 例: a=0 for i in range(100): ...

随机推荐

  1. zkdash部署

    1.拉取代码 #git clone https://github.com/ireaderlab/zkdash.git 2.安装依赖包 #cd zkdash #yum install -y python ...

  2. 调用html进行android布局

    1. [代码]html代码     <html>  <head>    <meta http-equiv="content-type" content ...

  3. IOS下WEBVIEW 的javascript数组与json定义 及交互

    最近在折腾IOS新闻浏览客户端,当中需要用到webview传递JSON数据到IOS上,然后在IOS上解析.刚入门IOS不久,看了不少的书,但都是囫囵吞枣.在开发过程中,遇到不少问题.开发环境mac m ...

  4. 004 - 修改Pycharm默认启动打开最近的项目

    随着项目的增多, 可能会使用到不同的项目, 而有的时候我们导入项目到新一个窗口中之后, 下一次打开Pycharm就变成之前导入的那个项目了 那么之前我们的项目怎么找到呢? 修改一下Pycharm启动默 ...

  5. glance image-create

    glance image-create

  6. java.lang.NoSuchMethodError: org.springframework.core.io.ResourceEditor错误

    一般是jar包冲突,或者某些jar包版本不同. 如上,spring其他包的版本均为4.2.5,而spring-webmvc的jar包为1.2.6版本,造成版本冲突. 把该包版本改为4.2.5,宣告成功 ...

  7. hdu-1597

    find the nth digit Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  8. Asset Catalog Help (四)---Adding an iOS App Icon Set or Launch Image Set

    Adding an iOS App Icon Set or Launch Image Set Organize different resolutions of your app icons and ...

  9. 201621123016 《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 关键字:接口,多态,Comparable,Comparator 1.2 尝试使用思维导图将这些关键词组织起来.注:思维导图一般不 ...

  10. Linux命令之清空当前文件

    vi进入文件 英文状态下按下  / 输入  %d 执行 清空当前文件 over!O(∩_∩)O哈哈~