我正在编写一个函数来处理预编译的正则表达式。我如何明确定义? E.g。
def use_regular_expression(regular_expression: ???):
pass
我要写什么代替“???”只接受给定有效正则表达式字符串的re.compile
输出?
print(type(re.compile('')))
说_sre.SRE_Pattern
并且PyCharm IDE建议它是re.__Regex
,但无论我尝试导入和指定它们的哪些显而易见的方式似乎都不起作用。
答案 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))