python基础13 ---函数模块3(正则表达式)
正则表达式
一、正则表达式的本质
1、正则表达式的本质(或 RE)是一种小型的、高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。
2、正则表达式简介
正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分 强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同;但不用担心,不被支持的语法通常是 不常用的部分。
二、正则表达式元字符。(. * + ? ^ $ {} [] \ | ())
1、" . "表示匹配字符串中除换行符外的任意字符。
eg:re.findall('a.','abc') #返回的结果是ab
2、" + "表示匹配前一个子表达式一次或多次,相当于一到正无穷。{1,}
eg:re.findall('a+','abc') #返回的结果是a
3、" * "表示匹配前一个子表达式零次或多次,相当于零到正无穷。{0,}
eg:re.findall('aa*','abc') #返回的结果是a
4、" ? "表示匹配前一个子表达式零次或一次,相当于零和一。{0,1}
eg:re.findall('aa?','abc') #返回结果为a
5、" ^ "(脱字符)表示匹配字符串开始的位置,也就是说只有目标字符串出现在开始位置才会匹配。
eg:re.findall('^ab','abcabcabc') #返回的结果是ab
6、" $ "(美元符)表示匹配字符串的末尾位置,也就是说只要目标字符串出现的末尾的位置才会匹配。
eg:re.findall('bc$','abcabc') #返回的结果为bc
7、" {x,y} "(大括号)表示匹配前面一个子表达式至少为x次最多为y次,其中x,y都为非负数,x<y。
eg:re.findall('a{2,4}','abcaaaabc') #返回的结果为aaaa
8、" [x,y] "(中括号)表示匹配中括号里面任意一个字符,如果匹配成功则返回结果,其中中括号内所有特殊字符都失去作用,只有“-”,“\”,“ ^ ”有其特殊意义。
eg:re.findall('a[b,c,d]c','abcadcafc') #返回的结果为abc,adc
注意:-在中括号中表示范围,^在中括号中表示取反,\在中括号中保留其原来功能。
9、" () "表示将需要匹配的字符分组,匹配小括号中的正则表达式,或者指定一个子集的开始和结束位置(该功能主要和\[0-9]使用)。
eg:re.findall('r(ge)g','fagrgeg5654yg5h54t3') #返回结果为ge
eg:re.findall('r(:?ge)g','fagrgeg5654yg5h54t3') #返回结果为rgeg
eg:re.search('r(ge)\1','fagrgege5654yg5h54t3') #返回结果为gege
eg:ret=re.search(r"-blog-aticles-(?P<year>20[01]\d)-(?P<month>\d+)","-blog-aticles-2015-04")#P是大写的
print(ret.group("year"))
10、"x|y"表示匹配正则表达式x或者正则表达式y.一般情况是和小括号连用
eg:re.findall('ac|bc','abcdefg') #返回的结果为bc
eg:re.findall('a(?:b|c)d','acdbcdefg') #返回的结果为acd
11、" \ "反斜杠在表达式中的作用最为广泛,它既可以将一个普通字符转换为一个特殊字符,也可以把一个特殊字符转换为一个普通字符(相当于解除元字符的特殊功能),如果反斜杠后面跟数字他有两种用法,如果数字为1-99表示引用序号的子字符串所匹配的字符串,如果数字是0开头或者为三位数字(092,123),那么他会把这个三位数字当作一个八进制来看待(主要是把这个八进制转换成ASCII表对应的字符,ASCII编码表共有127个字符)。
eg:re.findall('\d+','afew3223fef45t') #返回结果为3223,45
eg:re.findall(r'\\d','fawef\dfwa') #返回的结果为\\d
eg:re.search('(ge)\1','fagrgege5654yg5h54t3') #返回结果为ge 相当于re.search('gege','fagrgege5654yg5h54t3') #返回结果为gege
注释:\d 匹配任何十进制数; 它相当于类 [0-9]。
\D 匹配任何非数字字符; 它相当于类 [^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 匹配一个特殊字符边界,比如空格 ,&,#等
三、正则表达式模块
1、re模块
import re
2、模块的使用方法
1.re.findall(pattern,string) :该模块是返回所有匹配条件的结果放在一个列表内。
2.re.search(pattern,string):函数会在字符串中查找模式匹配,直到找到第一个符合匹配的字符串后返回匹配的对象,其返回的结果是对象的内存地址,要想查看其匹配的 对象就必须在返回结果对象的后面加上.group()来调用其字符串,其字符串类型是个str,如果字符串没有被匹配,就返回None。
3.re.match(pattern,string) :函数会在字符串开头查找,如果匹配成功返回该字符串的内存地址,需要用.group()调用该内存地址,返回str类型的字符串,如果没有匹配成功 则返回Nonetype
四、正则表达式扩展。
1、正则表达式匹配模式。
默认情况下重复元字符(*,{},+,?)的匹配模式是贪婪匹配(会尽可能的多匹配符合规格的字符串),如果想把他改为非贪婪匹配只需要在重复元字符后面加上‘?’就可以
例如,对于字符串abcccccccc,正则表达式是abc+会匹配整个字符串,如果abc+?则只会匹配abc
2、re.split()的用法
1.原型:re.split(pattern, string, maxsplit=0,flages)
eg:s="hello23world12alex7asd"
ret=re.split("(\d+)",s) #返回的结果是['hello', '23', 'world', '12', 'alex', '7', 'asd'] 不仅以数字进行分割还把数字本身返回
ret=re.split("\d+",s)#返回结果为['hello', 'world', 'alex', 'asd'] 只以数字进行分割
2.如果分割的字符串不符合,就返回整个字符串的list.
3、re.sub()和re.subs()用法
1.原型:re.sub(pattern, repl, string,count, flags)#(正则表达式,替换的新字符串,原始字符串,替换次数) #其中第二个repl可以是新的pattern,例如r'pattern'
2.eg:ret=re.subn("w.{2,3}d","egon","hello world waad")
4、re.compile()用法#编译正则表达式
1.p=re.compile(‘正则表达式’)
2.p.findall('字符串')
5、re.finditer()用法。
1.原型:re.finditer(pattern, string, flages)#返回的值是个可迭代对象。
eg: import re
ret=re.finditer('\d','ds3sy4784a')
print(ret) #<callable_iterator object at 0x10195f940>
print(next(ret).group())
print(next(ret).group())
python基础13 ---函数模块3(正则表达式)的更多相关文章
- python基础11 ---函数模块1
函数模块 一.函数模块的作用(为什么要有函数模块) 1.函数模块可以减少代码量 2.函数模块方便阅读 3.函数模块维护性强二.函数模块的本质以及调用方法 1.函数模块的本质就是一个.py结尾的文件,该 ...
- python基础14 ---函数模块5(模块和包)
模块与包 一.模块 1.模块是怎么诞生的. 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护.为了编写可维护的代码,我们把很多函数分组,分别放到 不同的文 ...
- python基础12 ---函数模块2
函数模块 一.sys函数模块详解 1.sys.argv[x] 功能:从程序外部接受参数,接收的参数个数可以是多个,在程序内部sys.argv吧这些外部参数转换成元组的形式,然后以索引x的方式在内部取出 ...
- Python基础之re模块(正则表达式)
就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中, 并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C 编写的 ...
- python基础(13):函数名的使用、第一类对象、闭包、迭代器
1. 函数名的运用 函数名是⼀个变量,但它是⼀个特殊的变量,与括号配合可以执⾏函数的变量. 1.1 函数名的内存地址 def func(): print("呵呵") print(f ...
- python基础14 ---函数模块4(configparser模块)
configparser模块 一.configparser模块 1.什么是configparser模块:configparser模块操作配置文件,配置文件的格式与windows ini和linux的c ...
- python基础——filter函数
python基础——filter函数 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函 ...
- python基础31[常用模块介绍]
python基础31[常用模块介绍] python除了关键字(keywords)和内置的类型和函数(builtins),更多的功能是通过libraries(即modules)来提供的. 常用的li ...
- 十八. Python基础(18)常用模块
十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...
随机推荐
- 【Lucene】Apache Lucene全文检索引擎架构之搜索功能3
上一节主要总结了一下Lucene是如何构建索引的,这一节简单总结一下Lucene中的搜索功能.主要分为几个部分,对特定项的搜索:查询表达式QueryParser的使用:指定数字范围内搜索:指定字符串开 ...
- IOS7下,AVAudioRecorder需要注意的一点
iOs7下,使用AVAudioRecorder录音的时候,会在顶部出现一个红框,或者红框一闪而过,这时候需要设置AVAudioSession,如下代码: AVAudioSession * sessio ...
- Swing中GridBagLayout布局的使用
1 http://pydoing.blogspot.com/2011/05/java-gridbaglayout.html 台湾人博客,需FQ 2 http://zhangjunhd.blog.51 ...
- Effective JavaScript Item 10 避免使用with
本系列作为Effective JavaScript的读书笔记. Item 9:避免使用withkeyword 重点: 设计withkeyword本来是为了让代码变简洁,可是却起到了相反的效果.比方: ...
- LeetCode226 InvertBinaryTree Java题解
题目: Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 解答: 遍历每个节点 直接交换他们的 ...
- swift中代理的使用
1.首先定义一份协议. protocol HttpToolProrocol{ //1.代理方法,将server返回的字典传递给调用者 func didRecieveResults(result:NSD ...
- 卸载Linux自带openjdk
1.查看自带jdk版本 java -version 2.查看 rpm -qa | grep java 显示如下信息: java-1.4.2-gcj-compat-1.4.2.0-40jpp. ...
- 如何落地全球最大 Kubernetes 生产集群
鲍永成 京东基础架构部技术总监, DevOps 标准核心编写专家 前言 JDOS 就是京东数据中心操作系统,随着数据中心规模不断的扩大,我们需要对数据中心做综合的考虑.所以一开 ...
- python操作Excel读写--使用xlrd (转)
(转自:http://www.cnblogs.com/lhj588/archive/2012/01/06/2314181.html) 一.安装xlrd模块 到python官网下载http://pypi ...
- FreeSWITCH版本更新
[1]FreeSWITCH版本更新 从2014年10月底开始,FreeSWITCH代码库改为由stash管理,该管理工具能更好地与jira集成. 如果你以前已经clone了代码,请做如下更新: git ...