6

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

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

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

4

5 回答 5

7

你可以做

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

在程序开始时,然后

type(m) is SRE_MATCH_TYPE

每次你想进行比较。

于 2012-09-20T06:20:33.090 回答
2

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

def is_match_obj(m):
    t = type(m)
    return (t.__module__, t.__name__) == ('_sre', 'SRE_Match')
于 2012-09-20T07:36:59.600 回答
1
from typing import Match

isinstance(m, Match)
于 2019-09-04T10:19:22.560 回答
0

作为type(m)返回我将使用的可打印表示:

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

所以你不必导入_sre模块,也不必做任何额外的match调用。

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

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

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

于 2012-09-20T07:30:35.663 回答
0

你可以做这样的事情

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

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

于 2012-09-20T06:23:45.700 回答