我需要检查变量是否是正则表达式匹配对象。
print(type(m))
返回类似的东西:<_sre.SRE_Match object at 0x000000000345BE68>
但是当我导入_sre
并尝试执行时,会引发type(m) is SRE_Match
异常。NameError: name 'SRE_Match' is not defined
你可以做
SRE_MATCH_TYPE = type(re.match("", ""))
在程序开始时,然后
type(m) is SRE_MATCH_TYPE
每次你想进行比较。
堆积,因为有很多方法可以解决问题:
def is_match_obj(m):
t = type(m)
return (t.__module__, t.__name__) == ('_sre', 'SRE_Match')
from typing import Match
isinstance(m, Match)
作为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 解释器,所以这部分答案可能不准确。)。
你可以做这样的事情
isinstance(m, type(re.match("","")))
通常不需要检查匹配对象的类型,所以没有人费心去做一个好的方法