diff --git a/common/lib/xmodule/xmodule/modulestore/__init__.py b/common/lib/xmodule/xmodule/modulestore/__init__.py
index 00a123e1d1080045dc66620524c78368cc2165eb..27aa5573eb24dcd4eea6424ccdb4b31fc6cc06f9 100644
--- a/common/lib/xmodule/xmodule/modulestore/__init__.py
+++ b/common/lib/xmodule/xmodule/modulestore/__init__.py
@@ -32,6 +32,12 @@ from xmodule.errortracker import make_error_tracker
 
 from .exceptions import InsufficientSpecificationError, InvalidLocationError
 
+# The name of the type for patterns in re changed in Python 3.7.
+try:
+    Pattern = re._pattern_type  # pylint: disable=protected-access
+except AttributeError:
+    Pattern = re.Pattern  # pylint: disable=no-member
+
 log = logging.getLogger('edx.modulestore')
 
 new_contract('CourseKey', CourseKey)
@@ -899,7 +905,7 @@ class ModuleStoreRead(six.with_metaclass(ABCMeta, ModuleStoreAssetBase)):
         """
         if isinstance(target, list):
             return any(self._value_matches(ele, criteria) for ele in target)
-        elif isinstance(criteria, re._pattern_type):  # pylint: disable=protected-access
+        elif isinstance(criteria, Pattern):
             return criteria.search(target) is not None
         elif callable(criteria):
             return criteria(target)