在Python 3.6中明确定义的已编译正则表达式的类型是什么?

时间:2017-09-11 05:53:36

标签: python regex python-3.x types

我正在编写一个函数来处理预编译的正则表达式。我如何明确定义? E.g。

def use_regular_expression(regular_expression: ???):
    pass

我要写什么代替“???”只接受给定有效正则表达式字符串的re.compile输出?

print(type(re.compile('')))_sre.SRE_Pattern并且PyCharm IDE建议它是re.__Regex,但无论我尝试导入和指定它们的哪些显而易见的方式似乎都不起作用。

2 个答案:

答案 0 :(得分:3)

感谢任何标记我的问题的人都是this one的副本(我自己很遗憾地找不到它)我找到了正确的(即我正在寻找的){{3由answer撰写,让我在这里引用那些可能偶然发现这个问题实例的人:

它是typing.re.Pattern

E.g。

from typing.re import Pattern

my_re = re.compile('foo')
assert isinstance(my_re, Pattern)

答案 1 :(得分:0)

我检查了re的源代码。在源代码中,有一行来检查输入的类型。

if isinstance(pattern, _pattern_type): #line 294

然后我检查_pattern_type是什么。

_pattern_type = type(sre_compile.compile("", 0))  #It also gives "_sre.SRE_Pattern"

正如您所看到的,即使在re的源代码中,也无法明确指出已编译的正则表达式的类。

不幸的是,你的问题似乎无法解决。

此外,在变量定义中使用注释只是告诉IDE检查,但不是在运行时真正限制。我建议你使用:

assert type(regular_expression) == type(re.compile("", 0))