summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/whatsnew/3.7.rst5
-rw-r--r--Lib/re.py4
-rw-r--r--Misc/NEWS.d/next/Library/2017-10-04-21-28-44.bpo-31671.E-zfc9.rst2
3 files changed, 11 insertions, 0 deletions
diff --git a/Doc/whatsnew/3.7.rst b/Doc/whatsnew/3.7.rst
index 845ed64..19b766f 100644
--- a/Doc/whatsnew/3.7.rst
+++ b/Doc/whatsnew/3.7.rst
@@ -326,6 +326,11 @@ Optimizations
expressions <re>`. Searching some patterns can now be up to 20 times faster.
(Contributed by Serhiy Storchaka in :issue:`30285`.)
+* :func:`re.compile` now converts ``flags`` parameter to int object if
+ it is ``RegexFlag``. It is now as fast as Python 3.5, and faster than
+ Python 3.6 about 10% depending on the pattern.
+ (Contributed by INADA Naoki in :issue:`31671`.)
+
* :meth:`selectors.EpollSelector.modify`, :meth:`selectors.PollSelector.modify`
and :meth:`selectors.DevpollSelector.modify` may be around 10% faster under
heavy loads. (Contributed by Giampaolo Rodola' in :issue:`30014`)
diff --git a/Lib/re.py b/Lib/re.py
index d772979..abbf8d6 100644
--- a/Lib/re.py
+++ b/Lib/re.py
@@ -275,6 +275,8 @@ _cache = OrderedDict()
_MAXCACHE = 512
def _compile(pattern, flags):
# internal: compile pattern
+ if isinstance(flags, RegexFlag):
+ flags = flags.value
try:
return _cache[type(pattern), pattern, flags]
except KeyError:
@@ -331,6 +333,8 @@ copyreg.pickle(Pattern, _pickle, _compile)
class Scanner:
def __init__(self, lexicon, flags=0):
from sre_constants import BRANCH, SUBPATTERN
+ if isinstance(flags, RegexFlag):
+ flags = flags.value
self.lexicon = lexicon
# combine phrases into a compound pattern
p = []
diff --git a/Misc/NEWS.d/next/Library/2017-10-04-21-28-44.bpo-31671.E-zfc9.rst b/Misc/NEWS.d/next/Library/2017-10-04-21-28-44.bpo-31671.E-zfc9.rst
new file mode 100644
index 0000000..b84dedd
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2017-10-04-21-28-44.bpo-31671.E-zfc9.rst
@@ -0,0 +1,2 @@
+Now ``re.compile()`` converts passed RegexFlag to normal int object before
+compiling. bm_regex_compile benchmark shows 14% performance improvements.