正则的基本操作(Python)

正则的part3:主要操作(python)

3.1 生成正则表达式对象(compile)

re.compile(pattern,flag=0)#原生代码

这个compile方法实际上是生成一个与pattern对应的正则表达式对象,以便于在以后的检索匹配分割登操作时重复生成,flag在这里没有什么特别的作用,下面我们就不讨论了。以下是操作示例

#其中r1的pattern为正则表达式‘1[2-9]{2}',一集即匹配第一个数字为1,后两个数字为2到9的字符串例如‘123'
r2 = re.compile('hello')
print(r1)
#输出re.compile('1[2-9]{2}')
print(type(r1))
print(r2)
#输出re.compile('hello')
print(type(r2))
#输出<class '_sre.SRE_Pattern'>

看起来还是有点难以理解对吧?没关系我们把这个正则表达式对象应用下去!

3.2 检索(search)

re.search(pattern,string)

这个方法是在string中检索是否有与pattern对应的子串,如果有则返回一个match'类型的对象,没有则返回none,现在我们来结合上面的compile方法进行示例演示,

r3 = re.search(r1,'abc123asd789')
print(r3)#输出<_sre.SRE_Match object; span=(3, 6), match='123'>
r4 = re.search(r2,'abc123asd789')
print(r4)#输出None,因为‘abc123asd789'中并没有hello
r5 = re.search(r2,'4we78hello23')
print(r5)#输出<_sre.SRE_Match object; span=(5, 10), match='hello'>

根据以上的方法演示,我们可以得出,如果string中有pattern匹配的子串,那么search方法将会返回一个match对象,其中会给出string中与pattern匹配的子串的下标,并且给出匹配的具体内容。如果没有,则会返回None值,此类对象也可以用于逻辑判断,判断string中是否有pattern匹配的子串等。

3.3 匹配(match)

re.match(pattern,string)

前面我们讲到了match对象,与match方法有一点点区别,match方法是检查,string中是否存在一个与pattern匹配的前缀,有则返回一个match对象,没有则返回None,我们采用示例来说明:

r6 = re.match(r1,'abc123asd189')
r7 = re.match(r1,'1239abc178123')
print(r6)#输出None
print(r7)#输出<_sre.SRE_Match object; span=(0, 3), match='123'>

可以看出,尽管字符串 ‘abc123asd189’和‘1239abc178123'中都有与r1匹配的子串,但是只有字符串‘123’是'1239abc178123'的前缀,所以只有r7输出了一个match对象

3.4分割(split)

re.split(pattern,string,maxsplit

分割方法以pattern作为分割串将string分段,并存入一个list,参数中的spilit表面最大分割数,当maxsplit = 0时,表示处理完整个字符串,以下是示例,其中的r2为以上生成的与‘hello’对应的正则表达式:

r8 = re.split(r2,'IhelloLOVEhelloPYTHONhello!',0)
print(r8)#输出['I', 'LOVE', 'PYTHON', '!']
r9 = re.split(r2,'IhelloLOVEhelloPYTHONhello!',1)
r10 = re.split(r2,'IhelloLOVEhelloPYTHONhello!',2)
print(r9)#输出['I', 'LOVEhelloPYTHONhello!']
print(r10)#输出'I', 'LOVE', 'PYTHONhello!']

可以看出,虽然string相同,但采用不同的maxsplit值,输出 的结果并不相同,字符串被分成了maxsplit+1个段,存入了list列表。

3.5 找出所有匹配串

re.findall(pattern,string)

此方法是返回一个表,表中给出可以匹配pattern的所有子串,前面已经有过关于手机号的正则示例了,这里才用r1 = re.compile('1[2-9]{2}'来演示findall方法:

r1 = re.compile('1[2-9]{2}')
r2 = re.findall(r1,'1239abc178555wer123')
print(r2)#输出['123', '178', '123']
print(type(r2))#输出<class 'list'>

通过示例可以看出,findall方法会直接返回匹配的子串,并且将子串存入一个列表。
而且不管子串是字符串的前缀、后缀还是包含于字符串中,findall方法都可以找到。

联系方式

如果有任何意见或者建议,欢迎发送邮件到我的邮箱:psywency@foxmail.com

比心❤️

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • re模块手册 本模块提供了和Perl里的正则表达式类似的功能,不关是正则表达式本身还是被搜索的字符串,都可以...
    喜欢吃栗子阅读 9,481评论 0 13
  • 自从年前得空写了两篇文章之后就开始忙了,这一忙就是2个月😭。当时信誓旦旦说的定期写篇博客的计划也就泡汤了🤣,不过好...
    景科同学阅读 4,866评论 0 9
  • 搞懂Python 正则表达式用法 Python 正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一...
    厦热阅读 5,556评论 0 2
  • 正则表达式、re模块、匹配单个字符、匹配多个字符、匹配开头结尾、匹配分组、re模块的高级用法、python贪婪和非...
    Cestine阅读 5,532评论 0 1
  • 在我的眼里,你一直是那个充满了温柔,事事为我考虑周全的那个爱人,曾经,我们也曾发生过许许多多的不愉快,你的喜怒哀乐...
    递归者阅读 1,124评论 0 1