博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正则表达
阅读量:4960 次
发布时间:2019-06-12

本文共 2252 字,大约阅读时间需要 7 分钟。

import rem = re.match('.+t5','dfgt5ab')print (m)#dfgt5ab匹配成功m = re.match('t5','t5abcd')print (m)#t5abcd匹配成功,从开头就要匹配上m = re.search('[0-9]','ab45cf')print(m.group(0))#4匹配成功.不一定从开头就匹配上strr = re.sub('[0-9]', 'f', 'df34gg')print (strr)#dfffggm = re.findall('[0-9]','54dgg5t')print (m)m = re.split('[0-9]','dgg55t')print (m)

运行结果:

<_sre.SRE_Match object; span=(0, 5), match='dfgt5'>

<_sre.SRE_Match object; span=(0, 2), match='t5'>

4

dfffgg

['5', '4', '5']

['dgg', '', 't']

 

 

注意match,search返回的是,匹配成功返回一个正则对象,不成功返回none. 我们可以调用group方法查看匹配到的字符串

m=re.match(r'\d+', '102300hhhj')

print (m.group(0))#102300

 

 

 

下面说下group

下面一个正则表达式:

 

output_(\d{4})

 

该正则表达式用括号()包围了一个小的正则表达式,\d{4}。 这个小的正则表达式被用于从结果中筛选想要的信息(在这里是四位数字)。这样被括号圈起来的正则表达式的一部分,称为群(group)。

我们可以m.group(number)的方法来查询群。group(0)是整个正则表达的搜索结果,group(1)是第一个群……

 

import rem = re.search("output_(\d{4})", "output_1986.txt")print (m.group(0))#output_1986print(m.group(1))#1986

我们还可以将群命名,以便更好地使用m.group查询:

 

import rem = re.search("output_(?P
\d{4})", "output_1986.txt") #(?P
...) 为group命名print(m.group("year"))

    

 

 

 

关于反斜杠:

由于正则表达式使用反斜杠来转义特殊字符,而python自身处理字符串时,反斜杠也是用于转义字符,这样就产生了一个双重转换的问题。

 

1.比如说普通字符串里的\n是换行符,那么正则表达式如何去表达字符串里的这个\?答案是是用两个反斜杠,第一个反斜杠起到去掉后面那个反斜杠转义的作用,单纯的表示字符串里的\

m=re.match("\\n","\n")

print (m)#匹配成功

 

2.字符串里一个\在正则表达式里需要用两个\表示,那么字符串里两个\在正则表达式里则需要四个\表示

m=re.match("\\\\n","\\n")

print (m)#匹配成功

m=re.match("\\\\n",r"\n")

print (m)#与上一个同理,匹配成功

 

3.在正则表达式前置r表示兼容模式,可以理解为:兼容了正则表达式的规则的字符串,先说明一点,在字符串中,\只有在有限的几个字符前面才表示转义,比如后面的这个字符是n,那这个\是转义,或者后面的这个字符就是\,那前面的第一个\也是转义。但如果不是那几个字符,比如9,d,那么\就不是转义了,就是单纯的反斜杠

print ("x\n")#\是转义

print ("\\s")#第一个\是转义,打印\s

print ("\9")#不是转义,打印\9

print ("\d")#不是转义,打印\d

所以,在python中字符串'\\d'和'\d'表示相同的字符 '\\d' is '\d'

 

但是\d在正则表达式里确是整数的意思,在正则表达式前面加r,可以理解为,先把这个正则表达式看成字符串,并且这个字符串的规则里加入正则表达式的规则,而后形成的字符串,再去匹配后面的字符串

m=re.match(r"\d","5")

print (m)#匹配成功,字符串\d表示数字

m=re.match(r"\\d","\\d")

print (m)#匹配成功,把正则表达式视为加入了正则表达式转义规则的字符串,则\\d为字符串\\d

 

m=re.match(r"\n","\n")

print (m)#匹配长虹

m=re.match(r"\\n","\\n")

print (m)#匹配成功

ret = re.findall(r'[1\-9]',r'\qq')

print (ret)#[]

ret = re.findall('[1\-9]',r'\qq')

print (ret)#正则表达式不加r前缀,此处还是返回空列表,想象为什么

除了\d,正则表达式里还有\-,\d表示数字,\-则表示-

m=re.match(r'^\d{3}\-\d{3,8}$', '010-12345')

print (m)#匹配成功

 

转载于:https://www.cnblogs.com/saolv/p/9200580.html

你可能感兴趣的文章
4、下行短信发送WebService、下行短信发送服务 -功能详细设计 --短信平台
查看>>
Failure to find com.oracle:ojdbc6:jar
查看>>
文本去重-----awk或者uniq
查看>>
Android学习笔记三:Intent实现页面跳转
查看>>
Django下JWT的使用
查看>>
React Native 的组件之底部导航栏 TabBarIOS(一)
查看>>
聊聊、SpringBoot 上传文件大小
查看>>
WF 学习笔记 (1) - 浅谈 WF 和 MVC 架构
查看>>
Monkey脚本API简介
查看>>
Linux学习笔记 之 Linux软件的安装与卸载
查看>>
在ASP.NET中,IE与Firefox下载文件带汉字名时乱码的解决方法
查看>>
Atitit.android播放smb 网络邻居视频文件解决方案
查看>>
webRTC-实时流媒体的福音
查看>>
[转]PHP $_SERVER变量中的 HTTP_HOST 和 SERVER_NAME
查看>>
简易c语言文法
查看>>
[QA]UrlRewriter无法解析实际存在的htm文件
查看>>
记一次因为索引维护导致批量无法继续的情况
查看>>
poj 2195 (最小费用最大流)
查看>>
HCA数据下载
查看>>
Codeforces 954 G. Castle Defense
查看>>