正则

  通过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. 利用javascript动态创建表格

    //说明:实现功能.原理上文相同.不过这次是利用已有的简单的方法创建行和列,并实现内容行鼠标移入变色功能! 效果图: /*两个方法 1.  trNode  table.insertRow(-1)    ...

  2. Java 8新特性之旅:使用Stream API处理集合

    在这篇“Java 8新特性教程”系列文章中,我们会深入解释,并通过代码来展示,如何通过流来遍历集合,如何从集合和数组来创建流,以及怎么聚合流的值. 在之前的文章“遍历.过滤.处理集合及使用Lambda ...

  3. 盈创动力之 JS校验方法

    var IS_NULL = 128; // 10000000var IS_FULL = 64; // 01000000var IS_HALF = 32; // 00100000var IS_ASCII ...

  4. HDU3666 THE MATRIX PROBLEM (差分约束+取对数去系数)(对退出情况存疑)

    You have been given a matrix C N*M, each element E of C N*M is positive and no more than 1000, The p ...

  5. 基于Jenkins+Gitlab的自动化部署实战

    故事背景 一个中小型企业,是典型的互联网公司,当初期的时候可能运维只能标配到2~3人,此时随着公司的发展,项目会逐渐增多.前期部署项目可能都是手动的, 俗称“人肉部署”,这简直是无比的痛苦,不能忍受的 ...

  6. 可移植的配置visual studio工程第三方库

    现在编程有太多的好用的第三方库,例如 计算机视觉方面的opencv c++的扩充库boost 特殊的第三方库,相机库,通讯库等 使用这些库给我们带来了极大的便利,同时也有很多困扰.这个工程在我电脑上明 ...

  7. eclipse项目从编程到打jar包到编写BashShell执行

    eclipse项目从编程到打jar包到编写BashShell执行 一.创建Java项目,并编写项目(带额外jar包) 二.打jar包 三.编写BashShell执行 其中一以及二可以参考我的博客 Ec ...

  8. 使用IntelliJ IDEA配置Tomcat(入门)

    一.下载Tomcat 1.进入官网http://tomcat.apache.org/,选择download,下载所需Tomcat版本. 此处我们选择下载最新版本Tomcat 9. 注意有zip和exe ...

  9. TypeScript完全解读(26课时)_20.声明文件

    首先学习识别已有的js库的类型 识别已有的js库的类型 UMD既可以作为全局库使用,也可以作为模块使用 先在着手来编写一个全局的库 新建文件 接收一个title,改变页面title的值 这里用到 &a ...

  10. 20个Flutter实例视频教程-第11节: 一个不简单的搜索条-2

    博客地址: https://jspang.com/post/flutterDemo.html#toc-1b4 视频地址:https://www.bilibili.com/video/av3970929 ...