正则表达式

简介:

正则表达式,简称为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 = ( 0 3 ), 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 ,如需转载请自行联系原作者
相关文章
|
API
GEE案例分析——利用sentinel-3数据计算空气污染指数(Air Pollution Index,简称API)
GEE案例分析——利用sentinel-3数据计算空气污染指数(Air Pollution Index,简称API)
471 0
|
SQL 运维 数据挖掘
带你读《Apache Doris 案例集》——03 Apache Doris 在金融壹账通指标中台的应用实践(1)
带你读《Apache Doris 案例集》——03 Apache Doris 在金融壹账通指标中台的应用实践(1)
379 2
|
12月前
|
自然语言处理 搜索推荐 数据安全/隐私保护
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】
鸿蒙登录页面设计展示了 HarmonyOS 5.0(Next)的未来美学理念,结合科技与艺术,为用户带来视觉盛宴。该页面使用 ArkTS 开发,支持个性化定制和无缝智能设备连接。代码解析涵盖了声明式 UI、状态管理、事件处理及路由导航等关键概念,帮助开发者快速上手 HarmonyOS 应用开发。通过这段代码,开发者可以了解如何构建交互式界面并实现跨设备协同工作,推动智能生态的发展。
693 10
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】
|
Go 开发工具 Python
【开发工具】Goland 2022.4 破解(by ja-netfilter)
【开发工具】Goland 2022.4 破解(by ja-netfilter)
894 1
【开发工具】Goland 2022.4 破解(by ja-netfilter)
|
NoSQL Java Linux
CentOS7下部署Graylog开源日志管理系统
CentOS7下部署Graylog开源日志管理系统
1188 0
CentOS7下部署Graylog开源日志管理系统
|
XML 开发框架 .NET
【已解决】请在位于当前 Web 应用程序根目录下的“web.config”配置文件中创建一个 <customErrors> 标记
【已解决】请在位于当前 Web 应用程序根目录下的“web.config”配置文件中创建一个 <customErrors> 标记
|
人工智能 弹性计算 自然语言处理
解决方案应用实例 | 零售云业务中台+超级App,阿里云助力海底捞全面实现“云上捞”
2018年,海底捞和阿里云合作搭建数据中台、业务中台和移动中台的基础架构,并在此基础上升级了海底捞超级App,重构了会员体系。同年,海底捞在北京开设了第一家智慧餐厅,采用了自动配锅机、智能传菜机器人和智能厨房管理系统。2019年,海底捞的订餐排号系统搬上云端。到2020年,海底捞将自动配锅机和智能传菜机器人推向了数百家门店,同时,后勤行政系统也上云,从前端到后端所有核心业务系统全部上云,海底捞至此全面实现了“云上捞”。
6199 2
解决方案应用实例 | 零售云业务中台+超级App,阿里云助力海底捞全面实现“云上捞”
|
数据采集 前端开发 数据可视化
程序员必知:基于氚云平台的应用开发学习(一)
程序员必知:基于氚云平台的应用开发学习(一)
555 0
|
SQL Java 编译器
使用pypy来提升你的python项目性能
使用pypy来提升你的python项目性能
381 0
|
存储 SQL NoSQL
[MySQL binlog实战] 增量同步与数据搜索~从入门到精通
[MySQL binlog实战] 增量同步与数据搜索~从入门到精通
710 0