元字符  .   *   +   ?   ^   $   { }     [ ]     -     \

.  匹配除了/n之外的任意一个字符

* 匹配*前面的单个字符任意次,即[0,+∞]

+ 匹配+前面的单个字符一次或多次,即[1,+∞]

? 匹配?前面的单个字符0次或一次,即[0,1]

^ 匹配以^后字符串整体开头的

$ 匹配以$前字符串整体结尾的

{ }匹配前面单个字符多次,{0,}相当于*,{1,}相当于+,{0,1}相当于?,{n}表示匹配n次,{m,n}表示最少匹配m次最多匹配n次(m<n)

(*、+、?、{ }单独使用都是贪婪匹配,即最可能多的匹配,在后面再加上?会变成惰性匹配,即尽可能少的匹配)

[ ]匹配字符集中的任意一个元素,在字符集中,除了-(表示两者之间)、^(表示非)和\(转义)有特殊含义 ,其他字符都表示普通字符,例如逗号就表示一个字符

|   匹配|前面或后面字符串整体

\d  匹配任何十进制数,相当于[0-9]

\D  匹配任何非0-9字符,相当于[^0-9]

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

\S  匹配任何非空白字符,相当于[^\t\n\r\f\v]

\w  匹配任何字母和数字字符,相当于[a-zA-Z0-9]

\W  匹配任何非字母和数字字符,相当于[^a-zA-Z0-9]

\b  匹配一个特殊字符

\.、\*、\^、\$  使\后面的字符表示本来的意义,不再表示元字符所代表的的特殊意义

import re
print(re.findall('al.x','12alexh'))
print(re.findall('alex*','12aleh'))
print(re.findall('alex+','12aleh'))
print(re.findall('alex?','12aleh'))
print(re.findall('^alex','alhjw'),re.findall('^alex','alexhjw'))
print(re.findall('alex$','wertalex'))
print(re.findall('alex{2,5}','alexxxxh'),re.findall('alex{2,5}?','alexxxxh'))
print(re.findall('al[e*g]x','alexlal*xg'))
print(re.findall('al[a-g]x','alexalwx'),re.findall('al[^a-g]x','alexalwx'),re.findall('al[^ag]x','alexalwx'))
print(re.findall('\d+','2+3*4-(26-7)'),re.findall('\D+','2+3*4-(26-7)'))
print(re.findall('\s+','hello world'),re.findall('\S+','hello world'))
print(re.findall('\w+','12@f\nlh58'),re.findall('\W+','12@f\nlh58'))
print(re.findall('www\.baidu','www.baidu'),re.findall('www\*baidu','www*baidu'))
print(re.findall('d\\\\k','12d\kc2f')) #d\\\\k通过python解释器解释之后,传给re模块的是\\k,re将第一个\解释为转义,余下的\k用作匹配

输出

['alex']
['ale']
[]
['ale']
[] ['alex']
['alex']
['alexxxx'] ['alexx']
['alex', 'al*x']
['alex'] ['alwx'] ['alex', 'alwx']
['', '', '', '', ''] ['+', '*', '-(', '-', ')']
[' '] ['hello', 'world']
['', 'f', 'lh58'] ['@', '\n']
['www.baidu'] ['www*baidu']

() 进行分组

print(re.findall('www.(baidu|163).com','www.baidu.com'))  #['baidu']
print(re.findall('www.(?:baidu|163).com','www.baidu.com')) #['www.baidu.com']

使用()进行分组匹配时,优先显示匹配到的内容

在括号内要匹配的字符串之前加?:,表示去掉优先显示,即显示所有的结果

findall将所有符合条件的匹配结果放在一个列表内

search匹配到一个就停止,且结果为一个对象,需要通过对象的group( )方法取值

match类似search,但是match只匹配在开头出现的

三个的使用方法都类似re.findall('匹配规则','匹配字符串')

(?P<name>'匹配规则'):表示将匹配规则命名为name,后续可通过group(name)取结果

print(re.search('(?P<name>[a-z]+)(?P<age>\d+)','alex35Alice28Bob30').group())  #输出alex35,group不加参数默认输出第一个即group(0)
print(re.search('(?P<name>[a-z]+)(?P<age>\d+)','alex35Alice28Bob30').group('name')) #输出alex
print(re.search('(?P<name>[a-z]+)(?P<age>\d+)','alex35Alice28Bob30').group('age')) #输出35
print(re.match('a+ex','aaex12').group(),re.match('a+ex','1aaex12')) #输出aaex None

split字符串分割,分割结果不包含用来分割的字符,使用方法re.split('分割符','处理字符串')

print(re.split('[ ,]','hi,nice to meet you'))  #输出['hi', 'nice', 'to', 'meet', 'you']
print(re.split('[ab]','8an8ab9jfahb'))# ['8','n8','','9jf','h',''] #输出['8', 'n8', '', '9jf', 'h', '']

第一个表示以空格或逗号分割

第二个表示以a或b分割,分割过程如下

原字符串中第2位的a将原字符串分割为8和n8ab9jfahb,取得第一个分割结果8

n8ab9jfahb中第3位的a将字符串分割为n8和b9jfahb,取得第二个分割结果n8

b9jfahb中第一位的b将字符串分割为''(由于b左边为空)和9jfahb,取得第三个分割结果''

9jfahb中第四位的a将字符串分割为9jh和hb,取得第四个分割结果9jh

hb中第二位的b将字符串分割为h和''(由于b右边为空),取得第五、六个分割结果h、''

sub替换,使用方法re.sub('被替换字符','替换字符','处理字符串'[,替换次数]),如果没有替换次数默认替换所有

subn替换和替换次数,使用方法re.subn('被替换字符','替换字符','处理字符串'),返回一个元组,第一个元素为替换后的结果,第二个元素为替换次数,

print(re.sub('\d+','A','h3e34ff7'),re.sub('\d+','A','h3e34ff7',2))  #hAeAffA hAeAff7
print(re.subn('\d+','A','h3e34ff7')) #('hAeAffA', 3)

compile事先编译匹配规则

com=re.compile('a+b')
print(com.findall('2aabcde')) #输出['aab']
print(com.match('abcde').group()) #输出ab
print(com.sub('F','2abc78aabcd')) #输出2Fc78Fcd

finditer 将匹配结果放入一个迭代器,再通过迭代器的next方法取值

s=re.finditer('s+','1ss34sssdaes')
print(s) #输出<callable_iterator object at 0x0000000001E320F0>,表示结果为一个迭代器
print(next(s)) #输出<re.Match object; span=(1, 3), match='ss'>,表示结果为一个对象,且匹配到的为ss
print(next(s).group()) #输出sss,通过对象的group()方法取到第二次next的值sss

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

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

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

  2. Python中re(正则表达式)模块学习

    re.match re.match 尝试从字符串的开始匹配一个模式,如:下面的例子匹配第一个单词. import re text = "JGood is a handsome boy, he ...

  3. Python中re(正则表达式)模块使用方法

    Python中常用的正则表达式处理函数: re.match re.match 尝试从字符串的开始匹配一个模式,如:下面的例子匹配第一个单词. import re text = "JGood ...

  4. Python数据分析学习-re正则表达式模块

    正则表达式 为高级的文本模式匹配.抽取.与/或文本形式的搜索和替换功能提供了基础.简单地说,正则表达式(简称为 regex)是一些由字符和特殊符号组成的字符串,它们描述了模式的重复或者表述多个字符,于 ...

  5. Python 正则表达式模块 (re) 简介

    Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,和 Perl 脚本的正则表达式功能类似,使用这一内嵌于 Python 的语言工具,尽管不能 ...

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

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

  7. Python正则表达式模块(re模块)

    Python是我接触到的第一门编程语言,虽然它足够简单,但是对于当时刚刚接触编程语言的我来说还是有些难度的,于是只是了解了一些Python的基本语法,稍微深入一点的地方都没怎么了解.不过,到现在为止, ...

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

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

  9. python中的正则表达式--re模块

    参考博客:https://www.cnblogs.com/tina-python/p/5508402.html 这里说一下python的re模块即正则表达式模块,先列出其中涉及到的各种字符和模式等: ...

随机推荐

  1. Ubuntu16.04下编译安装及运行单目ORBSLAM2

    官网有源代码和配置教程,地址是 https://github.com/raulmur/ORB_SLAM2 1 安装必要工具 首先,有两个工具是需要提前安装的.即cmake和Git. sudo apt- ...

  2. 2018牛客网暑期ACM多校训练营(第一场) D - Two Graphs - [无向图同构]

    题目链接:https://www.nowcoder.com/acm/contest/139/D 题目描述 Two undirected simple graphs  and  where  are i ...

  3. 0002python中dict和list的特殊构造

    >>> myinfor = {"name":"qiwsir","site":"qiwsir.github.io& ...

  4. flume学习笔记

    #################################################################################################### ...

  5. kubernetes网络原理

    1.1. 基础原则 每个Pod都拥有一个独立的IP地址,而且假定所有Pod都在一个可以直接连通的.扁平的网络空间中,不管是否运行在同一Node上都可以通过Pod的IP来访问. k8s中Pod的IP是最 ...

  6. MSMQ研究

    开发过程记录如下: 1.   本机配置MSMQ ------控制面板-------启动或者关闭Windows功能----默认安装MSMQ即可 注意:本地安装后再VS中才能引用System.Messag ...

  7. 【深入理解javascript】闭包

    1.作用域 “javascript没有块级作用域”.所谓“块”,就是大括号“{}”中间的语句.例如if语句: 再比如for语句: 所以,我们在编写代码的时候,不要在“块”里面声明变量,要在代码的一开始 ...

  8. Input的类型(type)

    HTML5 新的 Input 类型 HTML5 拥有多个新的表单输入类型.这些新特性提供了更好的输入控制和验证. 本章全面介绍这些新的输入类型: color date datetime datetim ...

  9. linux基础(1)-终端&shell类型&命令&文件系统&命令帮助的获取

    终端 用于与主机交互,必然用到的设备. 物理终端 直接接入本机的显示器和键盘设备:Console. 虚拟终端 附加在物理终端之上的以软件方式虚拟实现的终端,CentOS 6 默认启动 6 个虚拟终端. ...

  10. Vue 过渡

    过渡 通过 Vue.js 的过渡系统,可以在元素从 DOM 中插入或移除时自动应用过渡效果.Vue.js 会在适当的时机为你触发 CSS 过渡或动画,你也可以提供相应的 JavaScript 钩子函数 ...