我需要检查变量是否是正则表达式匹配对象。
print(type(m))
会返回类似的内容:<_sre.SRE_Match object at 0x000000000345BE68>
但是当我导入_sre
并尝试执行type(m) is SRE_Match
时,会引发异常NameError: name 'SRE_Match' is not defined
。
答案 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)