匹配对象(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()的字符串.

Copyright © 李振超 2018 all right reserved,powered by Gitbook
该文件最后修订时间: 2018-02-25 07:12:09

results matching ""

    No results matching ""