正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
今天介绍下Python3正则表达式re模块下的re.match函数和re.search方法
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
函数语法:
re.match(pattern, string, flags=0)
函数参数说明:
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等 |
import re
print(re.match('abc', 'abc.456.qwe')) # 在起始位置匹配
print(re.match('qwe', 'abc.456.qwe')) # 不在起始位置匹配
<re.Match object; span=(0, 3), match='abc'>
None
当re.match()在起始位置上匹配上的话,会返回"<re.Match object; span=(0,3), match='abc'>",这里返回的是一个 MatchObject
Match object是re方法match()返回的对象。
MatchObject 有4个重要的方法和属性:
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()) # 返回匹配结束的位置
abc
(0, 3)
0
3
用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
匹配对象方法 | 描述 |
---|---|
group(num=0) | 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。 |
groups() | 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。 |
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))
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(pattern, string, flags=0)
re.search的函数参数说明与re.match是完全一样的,返回的对象也是一样的,我们直接上代码分析
import re
print(re.search('abc', 'abc.mnb.qwe')) # 在起始位置匹配
print(re.search('qwe', 'abc.mnb.qwe')) # 不在起始位置匹配
<re.Match object; span=(0, 3), match='abc'>
<re.Match object; span=(8, 11), match='qwe'>
我们看到re.search返回的也是Match object对象,那同样也适用于Match object的4个方法
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()) # 返回匹配结束的位置
qwe
(8, 11)
8
11
使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
匹配对象方法 | 描述 |
---|---|
group(num=0) | 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。 |
groups() | 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。 |
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.执行结果
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 只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回 None,而 re.search 匹配整个字符串,直到找到一个匹配。
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!!")
No match!!
search --> matchObj.group() : asd
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。