If I compile a regex
>>> type(re.compile(""))
<class '_sre.SRE_Pattern'>
And want to pass that regex to a function and use Mypy to type check
def my_func(compiled_regex: _sre.SRE_Pattern):
I'm running into this problem
>>> import _sre
>>> from _sre import SRE_Pattern
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name 'SRE_Pattern'
It seems that you can import _sre
but for some reason SRE_Pattern
isn't importable.
A RegEx, or Regular Expression, is a sequence of characters that forms a search pattern. RegEx can be used to check if a string contains the specified search pattern.
The Python module re provides full support for Perl-like regular expressions in Python. The re module raises the exception re. error if an error occurs while compiling or using a regular expression.
mypy
is very strict in terms of what it can accept, so you can't just generate the types or use import locations that it doesn't know how to support (otherwise it will just complain about library stubs for the syntax to a standard library import it doesn't understand). Full solution:
import re
from typing import Pattern
def my_func(compiled_regex: Pattern):
return compiled_regex.flags
patt = re.compile('')
print(my_func(patt))
Example run:
$ mypy foo.py
$ python foo.py
32
Starting from Python 3.9 typing.Pattern
is deprecated.
Deprecated since version 3.9: Classes Pattern and Match from re now support []. See PEP 585 and Generic Alias Type.
You should use the type re.Pattern
instead:
import re
def some_func(compiled_regex: re.Pattern):
...
Yeah, the types the re
module uses aren't actually accessible by name. You'll need to use the typing.re
types for type annotations instead:
import typing
def my_func(compiled_regex: typing.re.Pattern):
...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With