前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python3 正则表达式

Python3 正则表达式

原创
作者头像
织幻妖
修改2021-01-21 18:06:43
6840
修改2021-01-21 18:06:43
举报

正则表达式

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

今天介绍下Python3正则表达式re模块下的re.match函数和re.search方法

re.match函数

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

函数语法

代码语言:javascript
复制
re.match(pattern, string, flags=0)

函数参数说明:

参数

描述

pattern

匹配的正则表达式

string

要匹配的字符串。

flags

标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等

1.代码分析

代码语言:javascript
复制
import re
print(re.match('abc', 'abc.456.qwe'))  # 在起始位置匹配
print(re.match('qwe', 'abc.456.qwe'))  # 不在起始位置匹配

2.执行结果

代码语言:javascript
复制
<re.Match object; span=(0, 3), match='abc'>
None

3.MatchObject

当re.match()在起始位置上匹配上的话,会返回"<re.Match object; span=(0,3), match='abc'>",这里返回的是一个 MatchObject

Match object是re方法match()返回的对象。

MatchObject 有4个重要的方法和属性:

  1. group() 返回被 RE 匹配的字符串
  2. span()返回一个元组包含匹配(开始,结束)的位置
  3. start()返回匹配开始的位置
  4. end()返回匹配结束的位置

4.MatchObject实例代码

代码语言:javascript
复制
import re
print(re.match('abc', 'abc.456.qwe').group())  # 返回被 RE 匹配的字符串
print(re.match('abc', 'abc.456.qwe').span())  # 返回一个元组包含匹配 (开始,结束) 的位置
print(re.match('abc', 'abc.456.qwe').start())  # 返回匹配开始的位置
print(re.match('abc', 'abc.456.qwe').end())  # 返回匹配结束的位置

5.执行结果

代码语言:javascript
复制
abc
(0, 3)
0
3

6.group(num)

用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

匹配对象方法

描述

group(num=0)

匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。

groups()

返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

7.group代码

代码语言:javascript
复制
import re
test1 = "qwe 1q2 asd ZXC M1N"
# .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符
# (.*?) 表示"非贪婪"模式,只保存第一个匹配到的子串
# (.*) (.*) (.*?) (.*) (.*) 匹配的正则表达式
#test1 要匹配的字符串。
# re.M | re.I 多行匹配,影响 ^ 和 $ 并使匹配对大小写不敏感
matchObj = re.match(r'(.*) (.*) (.*?) (.*) (.*)', test1, re.M | re.I)

print("matchObj.group() : ", matchObj.group())
print("matchObj.group(0) : ", matchObj.group(0))
print("matchObj.group(1) : ", matchObj.group(1))
print("matchObj.group(2) : ", matchObj.group(2))
print("matchObj.group(3) : ", matchObj.group(3))
print("matchObj.group(4) : ", matchObj.group(4))
print("matchObj.group(5) : ", matchObj.group(5))
print("matchObj.group(1,5) : ", matchObj.group(1,5))

8.执行结果

代码语言:javascript
复制
matchObj.group() :  qwe 1q2 asd ZXC M1N
matchObj.group(0) :  qwe 1q2 asd ZXC M1N
matchObj.group(1) :  qwe
matchObj.group(2) :  1q2
matchObj.group(3) :  asd
matchObj.group(4) :  ZXC
matchObj.group(5) :  M1N
matchObj.group(1,5) :  ('qwe', 'M1N')

re.search方法

re.search 扫描整个字符串并返回第一个成功的匹配。

函数语法:

代码语言:javascript
复制
re.search(pattern, string, flags=0)

re.search的函数参数说明与re.match是完全一样的,返回的对象也是一样的,我们直接上代码分析

1.代码分析

代码语言:javascript
复制
import re

print(re.search('abc', 'abc.mnb.qwe'))  # 在起始位置匹配
print(re.search('qwe', 'abc.mnb.qwe'))  # 不在起始位置匹配

2.执行结果

代码语言:javascript
复制
<re.Match object; span=(0, 3), match='abc'>
<re.Match object; span=(8, 11), match='qwe'>

我们看到re.search返回的也是Match object对象,那同样也适用于Match object的4个方法

3.re.search的Match object方法

代码语言:javascript
复制
import re

print(re.search('qwe', 'abc.mnb.qwe').group())   # 返回被 RE 匹配的字符串
print(re.search('qwe', 'abc.mnb.qwe').span())    # 返回一个元组包含匹配 (开始,结束) 的位置
print(re.search('qwe', 'abc.mnb.qwe').start())   # 返回匹配开始的位置
print(re.search('qwe', 'abc.mnb.qwe').end())     # 返回匹配结束的位置

4.执行结果

代码语言:javascript
复制
qwe
(8, 11)
8
11

5.group(num)

使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

匹配对象方法

描述

group(num=0)

匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。

groups()

返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

6.代码展示

代码语言:javascript
复制
import re
test1 = "qwe 1q2 asd ZXC M1N"
# .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符
# (.*?) 表示"非贪婪"模式,只保存第一个匹配到的子串
# (.*) (.*) (.*?) (.*) (.*) 匹配的正则表达式
#test1 要匹配的字符串。
# re.M | re.I 多行匹配,影响 ^ 和 $ 并使匹配对大小写不敏感
searchObj = re.search(r'(.*) (.*) (.*?) (.*) (.*)', test1, re.M | re.I)

print("searchObj.group() : ", searchObj.group())
print("searchObj.group(0) : ", searchObj.group(0))
print("searchObj.group(1) : ", searchObj.group(1))
print("searchObj.group(2) : ", searchObj.group(2))
print("searchObj.group(3) : ", searchObj.group(3))
print("searchObj.group(4) : ", searchObj.group(4))
print("searchObj.group(5) : ", searchObj.group(5))
print("searchObj.group(1,5) : ", searchObj.group(1,5))

7.执行结果

代码语言:javascript
复制
searchObj.group() :  qwe 1q2 asd ZXC M1N
searchObj.group(0) :  qwe 1q2 asd ZXC M1N
searchObj.group(1) :  qwe
searchObj.group(2) :  1q2
searchObj.group(3) :  asd
searchObj.group(4) :  ZXC
searchObj.group(5) :  M1N
searchObj.group(1,5) :  ('qwe', 'M1N')

re.match与re.search的区别

re.match 只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回 None,而 re.search 匹配整个字符串,直到找到一个匹配。

1.代码展示

代码语言:javascript
复制
import re

test1 = "qwe 1q2 asd ZXC M1N"

matchObj = re.match(r'asd', test1, re.M | re.I)
if matchObj:
    print("match --> matchObj.group() : ", matchObj.group())
else:
    print("No match!!")

matchObj = re.search(r'asd', test1, re.M | re.I)
if matchObj:
    print("search --> matchObj.group() : ", matchObj.group())
else:
    print("No match!!")

2.执行结果

代码语言:javascript
复制
No match!!
search --> matchObj.group() :  asd

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 正则表达式
    • re.match函数
      • 1.代码分析
      • 2.执行结果
      • 3.MatchObject
      • 4.MatchObject实例代码
      • 5.执行结果
      • 6.group(num)
      • 7.group代码
      • 8.执行结果
    • re.search方法
      • 1.代码分析
      • 2.执行结果
      • 3.re.search的Match object方法
      • 4.执行结果
      • 5.group(num)
      • 6.代码展示
    • re.match与re.search的区别
      • 1.代码展示
      • 2.执行结果
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档