匹配对象(Match Object
)是我们使用re.match()
和re.search()
匹配之后的返回值.里面封装了我们匹配的结果.
测试是否匹配
匹配对象总是可以当做true
来用, 因为如果匹配不到对象, re.match()
和re.search()
总是返回的是None
.
所以, 我们可以使用下面简单的if
语句, 来测试是否匹配.
match = re.search(pattern, string)
if match:
process(match)
匹配对象的属性和方法
m.group([group1, group2..., ...])
返回匹配指定的一个或多个子分组.
参数就是分组编号.
如果只传递一个参数, 则返回匹配这个组的字符串, 如果传递多个参数则返回的是一个元组(tuple
), 元组中存储的就是匹配的字符串.
如果传递的组号是无效, 则会抛出异常.
import re
# 正则表达式中一共分了两组 从前向后分别是第1组, 第2组. 整体是第 0 组
m = re.match("(\d+)([a-z]{2,5})", "1234abcd", re.I)
if m:
print(m.group()) # 因为没有传递参数, 所以获取的是整个参数
print(m.group(2)) # 只传递了一个参数, 所以获取的是一个字符串
print(m.group(0, 1, 2)) # 传递多个参数, 获取到的是一个 tuple
m.groups(default=None)
返回一个元组, 包含了所有匹配的子组 (从第1组开始...).
参数是没有匹配字符的组返回字符串, 默认是 None
import re
# 正则表达式中一共分了两组 从前向后分别是第1组, 第2组. 整体是第 0 组
m = re.match(r"(\d+)\.(\d+)", "24.1632")
if m:
print(m.groups())
m = re.match(r"(\d+)(\d+)?", "242222")
if m:
print(m.groups()) # 获取不到的组是 None
print(m.groups("abc")) # 获取不到的组则用 abc 替换
m.start([group])
和m.end([group])
返回的指定组的匹配的字符串的开始位置(包括)和结束位置(不包括)
可以使用s[start:end]
截取到匹配的字符串.
默认是0组, 表示整个正则表达式
import re
s = "24.1632"
m = re.match(r"(\d+)\.(\d+)", s)
if m:
print(m.start(1))
print(m.end(1))
print(m.group(1))
print(s[m.start(1):m.end(1)])
属性:m.lastIndex
指的是相匹配的最后一个组的索引(组号). 如果没有匹配的组, 则返回None
import re
s = "24.1632"
m = re.match(r"(\d+)\.(\d+)", s)
if m:
print(m.groups())
print(m.lastindex) # 最后一个匹配的是第2组, 所以返回2
属性:m.string
传递给match()和 search()
的字符串.