python中import re_python之re模块

一、re模块与正则表达式

今天我们要整理python里的re模块和正则表达式,正则表达式不仅在python领域,在整个编程届都占有举足轻重的地位。

在没有正式介绍re模块之前我们需要先了解一下什么是正则表达式,它又与re模块有什么联系呢?

简单介绍一下正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同;但不用担心,不被支持的语法通常是不常用的部分。如果已经在其他语言里使用过正则表达式,只需要简单看一看就可以上手了。

正则表达式的用法

元字符

\w 匹配数字字母下滑线 word关键字 [a-zA-Z0-9_]

\d 匹配所有的数字 digit [0-9]

\s 匹配所有的空白符 回车/换行符 制表符 空格 space [\n\t ]

匹配换行符 回车 \n

匹配制表符 tab \t

匹配空格

\W \D \S 和\w \d \s取反

[\s\S] [\d\D] [\w\W]是三组全集 意思是匹配所有字符

\b 表示单词的边界

和转义字母相关的 元字符

\w \d \s(\n\t) \b \W \D \S

^ 与$

^ 匹配一个字符串的开始

$ 匹配一个字符串的结束

. 表示匹配 除换行符之外的所有字符

[] 只要出现在中括号内的内容都可以被匹配

[^] 只要不出现在中括号中的内容都可以被匹配

有一些有特殊意义的元字符进入字符组中会回复它本来的意义 : . | [ ] ( )

a|b 或 符合a规则的或者b规则的都可以被匹配

如果a规则是b规则的一部分,且a规则比b规则要苛刻/长,就把a规则写在前面

将更复杂的\更长的规则写在最前面

() 分组 表示给几个字符加上量词约束的需求的时候,就给这些量词分在一个组

量词

{n}表示 这个量词之前的字符出现n次

{n,} 表示这个量词之前的字符至少出现n次

{n,m} 表示这个量词之前的字符出现n-m次

? 表示匹配量词之前的字符出现 0次 或者 1次 表示可有可无

+ 表示匹配量词之前的字符出现 1次 或者 多次

* 表示匹配量词之前的字符出现 0次 或者 多次

二、re模块的使用

首先我们在使用模块的时候先要导入模块,这时必不可少的步骤。

1.findall 匹配列表中的每一个元素

1 importre2 s="q6we798qw76sa45f"

3 ret=re.findall("\d",s)4 print(ret)5 #运行结果['6', '7', '9', '8', '7', '6', '4', '5']

2.search 只会匹配到第一个符合的表达式(从左到右的顺序),得到的不是直接的结果,需要用group()方法来查看。这里需要注意当没有匹配到符合

的表达式,直接打印会显示None,而通过group()方法来查看会报错

1 importre2 s="as4d98qw7e"

3 ret=re.search("\d",s)4 print(ret) #运行结果:<_sre.SRE_Match object; span=(2, 3), match='4'>

5 print(ret.group()) #运行结果: 4

findall 与 search 他们的用途都是用来查找,二者的区别在于findall 可以匹配全部结果,而search 只能匹配第一个结果。

3.match 大体上与 search 用法相同,而不同点则是match默认在表达式前有 "^" 开头符号

importre

s= "123python456"re1= re.search("\d+$",s)

re2= re.match("\d+$",s)print(re1.group()) #运行结果 : 456

print(re2.group()) #报错 因为 match 在正则表达式前默认存在一个^,所以字符串s不是以数字开头数字结尾。

4.split 切割.

1 importre2 s = "123python456"

3 ret = re.split("\d$",s)4 print(ret) #运行结果:['123python45', '']

5.sub 与 subn 替换

importre

s= "123python456"re1= re.sub("\d","H",s)print(re1) #运行结果 :HHHpythonHHH

re2 = re.subn("\d","H",s)print(re2) #运行结果 :('HHHpythonHHH', 6) subn会返回一个元组,元组中的第二个元素是替换的次数

6.compile 编译

compile的作用是将正则表达式编译为字节码,当多次使用时不会多次便宜,它的特点就是节省时间

1 importre2 s = "laixue1python2HAPPY"

3 obj1= re.compile("\d")4 re1 =obj1.findall(s)5 print(re1) #运行结果 : ['1', '2']

6

7 obj2 = re.compile("[a-z]+")8 print(obj2.search(s).group()) #运行结果: laixue

7.finditer 返回一个存放匹配结果的迭代器,可以通过group()方法来查看结果,它的特点就是减少空间内存

1 importre2

3 s = "13245python"

4 ret = re.finditer("[a-z]",s)5 print(ret) #运行结果 : 已经可以看出是迭代器了

6

7 if ret.__iter__():8 print(True)9 else:10 print(False)11 #判断返回是否为迭代器 运行结果为True

12

13 print([i.group() for i in ret ]) #运行结果 : ['p', 'y', 't', 'h', 'o', 'n'] 所以finditer 可以用groud()方法来查看结果

分组 ( )在re模块中的使用

分组 ( ) 在正则表达式中表示分组将多个表达式统一管理后接量词来用,而在python的re模块中 " ( ) "有着不一样的用法

1.分组 ( ) 表示优先级

在search中使用

1 importre2 s = "132python456"

3 ret = re.search("\d+([a-z]+)\d+",s)4 print(ret.group()) #运行结果 : 132python456

5 print(ret.group(1)) #运行结果 ; python

6 #当我们在表达式中添加分组表示优先级时,通过在group() 方法中添加参数可以优先获得结果

在findall中使用

1 importre2 s = "123python456"

3 #ret = re.findall("\d+([a-z]+)\d+",s)

4 #print(ret) # 运行结果 : ['python']

5 #当 ( ) 在findall中使用时,而无法使用group()方法查看结果,这时默认匹配出( ) 内的结果

6 ret = re.findall("(\d+)([a-z]+)\d+",s)7 print(ret) #运行结果 : [('123', 'python')]

8 #当 多个( )同时使用时,会将结果以元组的形式添加到列表中

在split中使用

1 importre2 s = "132python456"

3 ret = re.split("^\d+([a-z]+)",s)4 print(ret) #运行结果 : ['', 'python', '456']

5 #在split中使用时() 内的表达式被切割后会留下来。

2.取消 分组( ) 优先级 " ?:"

importre

s= "123python456"ret= re.findall("(\d+)(?:[a-z]+)(\d+)",s)print(ret) #运行结果 : [('123', '456')]#当在( ) 内开头加入" ?: "字符时 , 表示取消优先级

3.分组( ) 的命名 " ?P< >"

1 importre2 s = "123python123"

3 ret = re.search("(?P\d+)([a-z]+)(?P=a)",s)4 print(ret.group(0)) #运行结果 : 123python123

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值