diff --git a/sphinx/ext/extlinks.py b/sphinx/ext/extlinks.py index 8caba88429..659a92b799 100644 --- a/sphinx/ext/extlinks.py +++ b/sphinx/ext/extlinks.py @@ -26,6 +26,7 @@ """ import re +import sys import warnings from typing import Any, Dict, List, Tuple @@ -70,7 +71,13 @@ def check_uri(self, refnode: nodes.reference) -> None: title = refnode.astext() for alias, (base_uri, _caption) in self.app.config.extlinks.items(): - uri_pattern = re.compile(base_uri.replace('%s', '(?P.+)')) + if sys.version_info < (3, 7): + # Replace a leading backslash because re.escape() inserts a backslash before % + # on python 3.6 + uri_pattern = re.compile(re.escape(base_uri).replace('\\%s', '(?P.+)')) + else: + uri_pattern = re.compile(re.escape(base_uri).replace('%s', '(?P.+)')) + match = uri_pattern.match(uri) if match and match.groupdict().get('value'): # build a replacement suggestion