资讯专栏INFORMATION COLUMN

python 正则表达式

孙淑建 / 2182人阅读

摘要:正则表达式是一种用来匹配字符串的强有力的武器。正则表达式匹配如果直接给出字符,就是精确匹配。模块提供模块,包含所有正则表达式的功能。分组除了简单地判断是否匹配之外,正则表达式还有提取子串的强大功能。

正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。

因为正则表达式也是用字符串表示的,所以,我们要首先了解如何用字符来描述字符。

正则表达式匹配:

如果直接给出字符,就是精确匹配。

d 可以匹配一个数字

w 可以匹配一个字母或数字

. 可以匹配任意字符

要匹配变长的字符,在正则表达式中:

用 * 表示任意个字符(包括0个)

用 + 表示至少一个字符

用 ? 表示0个或1个字符

用 {n} 表示n个字符

用 {n,m} 表示n-m个字符

特殊字符 要用""转义

正则表达式实例:

实例1:

d{3}s+d{3,8}

d{3} 表示匹配3个数字 例如010

s 匹配一个空格或tab,s+表示至少有一个空格 例如 ‘ ’

d{3,8} 表示3-8个数字,例如‘1234567’

实例2:

‘0574-65972291’

d{4}-d{4,8}

w

正则表达式进阶:

要做更精确地匹配,可以用 [ ] 表示范围

A|B 可以匹配A或B,所以(P|p)ython可以匹配"Python"或者"python"

^表示行的开头,^d表示必须以数字开头,$表示行的结束,d$表示必须以数字结束。

re模块

Python提供re模块,包含所有正则表达式的功能。由于Python的字符串本身也用 转义,因此使用Python的r前缀,就不用考虑转义的问题了。

例如: s = r " ABC-001 "

案例:

match( )方法 判断是否匹配,如果匹配成功,返回Match对象,否则返回None。

正则切分字符串

用正则表达式切分字符串比用固定的字符更灵活,请看正常的切分代码

"a b c".split(" ")

["a", "b", "", "", "c"]

re.split(r"s+","a b c")

["a","b","c"]

如果用户输入了一组标签,下次记得用正则表达式来把不规范的输入转化成正确的数组。

分组

除了简单地判断是否匹配之外,正则表达式还有提取子串的强大功能。用 ( ) 表示的就是要提取的分组(Group)

贪婪匹配

正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。

由于d+采用贪婪匹配,直接把后面的0全部匹配了,结果0*只能匹配空字符串了。

必须让d+采用非贪婪匹配(也就是尽可能少匹配),才能把后面的0匹配出来,加个?就可以让d+采用非贪婪匹配:

编译

当我们在Python中使用正则表达式时,re模块内部会干两件事情:

编译正则表达式,如果正则表达式的字符串本身不合法,会报错;

用编译后的正则表达式去匹配字符串。

如果一个正则表达式要重复使用几千次,出于效率的考虑,我们可以预编译该正则表达式,接下来重复使用时就不需要编译这个步骤了,直接匹配:

编译后生成Regular Expression对象,由于该对象自己包含了正则表达式,所以调用对应的方法时不用给出正则字符串。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40682.html

相关文章

  • Python基础教程:-正则达式基本语法以及re模块

    摘要:正则表达式关闭或可选标志。如果所含正则表达式,以表示,在当前位置成功匹配时成功,否则失败。否则指的是八进制字符码的表达式。 正则表达式是个很牛逼的东西,不管是在javascript,还是在Python web开发(http://www.maiziedu.com/course/python-px...)中,我们都会遇到正则表达式,虽然javascript和Python的正则表达式区别不大...

    y1chuan 评论0 收藏0
  • PythonPython正则达式使用指导

    摘要:反斜杠的困扰与大多数编程语言相同,正则表达式里使用作为转义字符,这就可能造成反斜杠困扰。文本中正则表达式结束搜索的索引。以元组形式返回全部分组截获的字符串。用于指定最大分割次数,不指定将全部分割。 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法...

    nihao 评论0 收藏0
  • Python正则达式保姆式教学,带你精通大名鼎鼎的正则

    摘要:今天来给大家分享一份关于比较详细的正则表达式宝典,学会之后你将对正则表达式达到精通的状态。正则表达式是用在方法当中,大多数的字符串检索都可以通过来完成。导入模块在使用正则表达式之前,需要导入模块。 ...

    tulayang 评论0 收藏0
  • Python 正则达式

    摘要:今天就专门看看正则表达式。下面是一个正则表达式最简单的使用例子。这个例子使用了正则表达式模块的函数,它会返回所有符合模式的列表。查询标志让正则表达式具有不同的行为。,按给定正则表达式分割字符串。,正则表达式中捕获组的数量。 最近研究Python爬虫,很多地方用到了正则表达式,但是没好好研究,每次都得现查文档。今天就专门看看Python正则表达式。本文参考了官方文档 re模块。 模式 首...

    FrancisSoung 评论0 收藏0
  • Python正则达式很难?一篇文章搞定他,不是我吹!

    摘要:正则表达式语法字符与字符类特殊字符以上特殊字符要想使用字面值,必须使用进行转义字符类包含在中的一个或者多个字符被称为字符类,字符类在匹配时如果没有指定量词则只会匹配其中的一个。 1. 正则表达式语法 1.1 字符与字符类 1 特殊字符:.^$?+*{}| 以上特殊字符要想使用字面值,必须使用进行转义 2 字符类 1. 包含在[]中的一个或者多个字符被称为字符类,字符类在匹配时如果没有指...

    dcr309duan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<