检查变量是否为SRE_Match

时间:2012-09-20 06:10:18

标签: python regex

我需要检查变量是否是正则表达式匹配对象。

print(type(m))会返回类似的内容:<_sre.SRE_Match object at 0x000000000345BE68>

但是当我导入_sre并尝试执行type(m) is SRE_Match时,会引发异常NameError: name 'SRE_Match' is not defined

5 个答案:

答案 0 :(得分:6)

你可以做到

SRE_MATCH_TYPE = type(re.match("", ""))

在程序开始时,然后

type(m) is SRE_MATCH_TYPE

每次你想进行比较。

答案 1 :(得分:2)

堆积,因为有很多方法可以解决问题:

def is_match_obj(m):
    t = type(m)
    return (t.__module__, t.__name__) == ('_sre', 'SRE_Match')

答案 2 :(得分:0)

你可以做这样的事情

isinstance(m, type(re.match("","")))

通常不需要检查匹配对象的类型,因此没有人费心去做一个很好的方法

答案 3 :(得分:0)

type(m)返回可打印的表示时,我会使用:

repr(type(m)) == "<type '_sre.SRE_Match'>"

因此您无需导入_sre模块,也无需再进行match次呼叫。

这适用于Python 2.似乎比Python 3中类型(m)的结果不同,类似于<_sre.SRE_Match object at 0x000000000345BE68>。如果是这样,我想你可以使用:

repr(type(m)).startswith("<_sre.SRE_Match")

或类似的东西(我现在手边没有Python 3解释器,因此这部分答案可能不准确。)。

答案 4 :(得分:0)

from typing import Match

isinstance(m, Match)