开发者社区> 技术小美> 正文

正则表达式

简介:
+关注继续查看

正则表达式,简称为regex,是文本模式的描述方法。例如,\d是一个正则表达式,表示一位数字字符,即任何一位0到9的数字。


使用步骤

python中所有正则表达式的函数都在re模块中。


▎python中使用正则表达式的步骤如下:

①用import re导入正则表达式模块;

②用re.compile()函数创建一个Regex对象。

③向Regex对象的search()方法传入想查找的字符串。它返回一个Match对象。

④调用Match对象的group()方法,返回实际匹配文本的字符串。


字符分类

    字符类型               字符含义

       \d               0到9的任何数字

       \D               除0到9的数字以外的任何字符

       \w               任何字母、数字或下划线(单词)

       \W               除字母、数字和下划线以外的任何字符

       \s               空格、制表符或换行符(空白)

       \S               除空格、制表符和换行符以外的任何字符


正则表达式符号

    ?                            匹配零次或一次前面的分组

    *                            匹配零次或多次前面的分组

    +                            匹配一次或多次前面的分组 

    |                            匹配多个表达式中的一个

    ()                           使用括号创建"分组"

    {n}                          匹配n次前面的分组

    {n,}                         匹配n次或更多前面的分组

    {,m}                         匹配零次到m次前面的分组

    {n,m}                        匹配至少n次、至多m次前面的分组

    {n,m}?或*?或+?               对前面的分组进行非贪心匹配

    ^spam                        字符串必须以spam开始

    spam$                        字符串必须以spam结束

    .                            匹配所有字符,换行符除外

    \d、\w和\s                   匹配数字、单词和空格

    \D、\W和\S                   匹配出数字、单词和空格外的所有字符

    [abc]                        匹配方括号内的任何字符

    [^abc]                       匹配不在方括号内的任何字符


正则表达式方法

1、compile()

向re.compile()传入一个字符串值,表示正则表达式,它将返回一个Regex模式对象。

如果要忽略正则表达式字符串中的空白符和注释,可以传入变量re.VERBOSE。

如果要不区分大小写,可以传入re.IGNORECASE或re.I。

如果要句点字符匹配换行,可以传入re.DOTALL。

re.compile()函数只接受一个值作为它的第二参数,可以用管道符将变量组合起来,从而绕过这个限制。

1
2
>>> import re
>>> phoneNum=re.compile(r'\d\d\d-\d\d\d\d\d\d\d\d')


2、group()

Match对象有一个group()方法,它返回被查找字符串中实际匹配的文本。

添加括号将在正则表达式中创建”分组“。正则表达式字符串中的第一对括号是第1组。第二对括号是第2组。向group()匹配对象方法传入整数1或2,就可以取得匹配文本的不同部分。向group()方法传入0或不传入参数,将返回整个匹配的文本。如果想要一次就获得所有的分组,就使用groups()方法。

1
2
3
4
5
6
7
8
9
10
11
>>> import re
>>> phoneNum=re.compile(r'(\d\d\d)-(\d\d\d\d\d\d\d\d)')
>>> mo=phoneNum.search('My number is 021-68000000')
>>> print(mo.group(0))
021-68000000
>>> print(mo.group(1))
021
>>> print(mo.group(2))
68000000
>>> print(mo.groups())
('021''68000000')


3、search()

Regex对象的search()方法查找传入的字符串,寻找该正则表达式的所有匹配。如果字符串中没有找到该正则表达式模式,search()方法将返回None。如果找到了该模式,search()方法将返回一个Match对象。

1
2
3
4
5
>>> import re
>>> phoneNum=re.compile(r'\d\d\d-\d\d\d\d\d\d\d\d')
>>> mo=phoneNum.search('My number is 021-68000000')
>>> print(mo.group())
021-68000000


4、findall()

search()将返回一个Match对象,包含被查找字符串中的”第一次“匹配的文本,而findall()方法将返回一组字符串,包含被查找字符串中的所有匹配。


▎作为findall()方法的返回结果,有如下两点需要注意:

①如果调用在一个没有分组的正则表达式上,例如\d\d\d-\d\d\d-\d\d\d\d,将返回一个匹配字符串的列表,如['123-456-7890','000-000-0000']。

②如果调用在一个有分组的正则表达式上,例如(\d\d\d)-(\d\d\d)-(\d\d\d\d),将返回一个字符串的元组的列表,如[('123','456','7890'),('000','000','0000')]

1
2
3
4
5
6
>>> import re
>>> phoneNum=re.compile(r'(\d\d\d)')
>>> phoneNum.search('68000000')
<_sre.SRE_Match object; span=(03), match='680'>
>>> phoneNum.findall('68000000')
['680''000']


5、sub()

sub()方法需要传入两个参数。第一个参数是一个字符串,用于取代发现的匹配。第二个参数是一个字符串,即正则表达式。sub()方法返回替换完成后的字符串。

1
2
3
4
>>> import re
>>> phoneNum=re.compile(r'021-6800')
>>> phoneNum.sub('8800','My number is 021-68000000.')
'My number is 88000000.'


贪心与非贪心

python的正则表达式默认是”贪心“的,这表示在有二义的情况下,它们会尽可能匹配最长的字符串。花括号的”非贪心“版本匹配尽可能短的字符串,即在结束的花括号后跟一个问号。

问号在正则表达式中可能有两种含义:声明非贪心匹配或表示可选的分组。这两种含义是完全无关的。

1
2
3
4
5
6
7
8
9
>>> import re
>>> phoneNum01=re.compile(r'(\d\d\d){1,3}')
>>> phoneNum02=re.compile(r'(\d\d\d){1,3}?')
>>> mo01=phoneNum01.search('68000000')
>>> mo02=phoneNum02.search('68000000')
>>> mo01.group()
'680000'
>>> mo02.group()
'680'













本文转自Grodd51CTO博客,原文链接:http://blog.51cto.com/juispan/1949567,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
一文掌握正则表达式
本文适合对正则不太熟悉,以及想掌握正则表达式的小伙伴阅读~
119 0
正则表达式总结
什么是正则表达式? 正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象。
15 0
常用的正则表达式
正则表达式是一种描述字符串结构的语法规则,是一种特定的格式化模式,用于验证各种字符串是否匹配(Match)这个特征,进而实现高级的文本查找、替换、截取等操作。 正则表达式在发展过程中出现了多种形式,一种是POSIX规范兼容的表达式,另一种是当Perl(一种功能丰富的编程语言)发展起来后,衍生出来的PCRE(Perl兼容正则表达式)库,使得许多开发人员将PCRE整合到自己的语言中,PHP中也未PCRE库的使用提供了相应的函数。
56 0
常用的正则表达式大全
本文总结了常用的常用的正则表达式
39 0
😝 这次一定 | "学废" 正则表达式 🙋‍♂️(中)
正则表达式 → 没有一个开发仔会对这个词陌生吧?没印象的话,想想你是如何 判断身份证、手机号码是否合法的 ?Tips:本节代码示例基于Python的re库编写,虽大部分编程语言的正则库都是师从 Perl语言,语法基本一样,但也可能略有差异~
69 0
😝 这次一定 | "学废" 正则表达式 🙋‍♂️(上)
正则表达式 → 没有一个开发仔会对这个词陌生吧?没印象的话,想想你是如何 判断身份证、手机号码是否合法的 ?Tips:本节代码示例基于Python的re库编写,虽大部分编程语言的正则库都是师从 Perl语言,语法基本一样,但也可能略有差异~
98 0
正则表达式
正则表达式, 又称正规表示式、 正规表示法、 正规表达式、 规则表达式、 常规表示法(英语: Regular Expression, 在代码中常简写为regex、 regexp或RE) , 是计算机科学的一个概念。
89 0
最全的常用正则表达式大全
很多不太懂正则的朋友,在遇到需要用正则校验数据时,往往是在网上去找很久,结果找来的还是不很符合要求。所以我最近把开发中常用的一些正则表达式整理了一下,在这里分享一下。
1243 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载