mirror of
https://github.com/python/cpython.git
synced 2025-07-07 11:25:30 +00:00
gh-133306: Use \z instead of \Z in regular expressions in the stdlib (GH-133337)
This commit is contained in:
parent
add0ca9ea0
commit
84a08f8629
16 changed files with 23 additions and 23 deletions
|
@ -371,7 +371,7 @@ def _setoption(arg):
|
|||
if message:
|
||||
message = re.escape(message)
|
||||
if module:
|
||||
module = re.escape(module) + r'\Z'
|
||||
module = re.escape(module) + r'\z'
|
||||
if lineno:
|
||||
try:
|
||||
lineno = int(lineno)
|
||||
|
|
|
@ -6096,7 +6096,7 @@ _parser = re.compile(r""" # A numeric string consists of:
|
|||
(?P<diag>\d*) # with (possibly empty) diagnostic info.
|
||||
)
|
||||
# \s*
|
||||
\Z
|
||||
\z
|
||||
""", re.VERBOSE | re.IGNORECASE).match
|
||||
|
||||
_all_zeros = re.compile('0*$').match
|
||||
|
@ -6124,7 +6124,7 @@ _parse_format_specifier_regex = re.compile(r"""\A
|
|||
(?P<thousands_sep>[,_])?
|
||||
(?:\.(?P<precision>0|(?!0)\d+))?
|
||||
(?P<type>[eEfFgGn%])?
|
||||
\Z
|
||||
\z
|
||||
""", re.VERBOSE|re.DOTALL)
|
||||
|
||||
del re
|
||||
|
|
|
@ -30,7 +30,7 @@ from io import StringIO
|
|||
|
||||
NLCRE = re.compile(r'\r\n|\r|\n')
|
||||
NLCRE_bol = re.compile(r'(\r\n|\r|\n)')
|
||||
NLCRE_eol = re.compile(r'(\r\n|\r|\n)\Z')
|
||||
NLCRE_eol = re.compile(r'(\r\n|\r|\n)\z')
|
||||
NLCRE_crack = re.compile(r'(\r\n|\r|\n)')
|
||||
# RFC 2822 $3.6.8 Optional fields. ftext is %d33-57 / %d59-126, Any character
|
||||
# except controls, SP, and ":".
|
||||
|
|
|
@ -64,7 +64,7 @@ _RATIONAL_FORMAT = re.compile(r"""
|
|||
(?:\.(?P<decimal>\d*|\d+(_\d+)*))? # an optional fractional part
|
||||
(?:E(?P<exp>[-+]?\d+(_\d+)*))? # and optional exponent
|
||||
)
|
||||
\s*\Z # and optional whitespace to finish
|
||||
\s*\z # and optional whitespace to finish
|
||||
""", re.VERBOSE | re.IGNORECASE)
|
||||
|
||||
|
||||
|
|
|
@ -1350,7 +1350,7 @@ class PyShell(OutputWindow):
|
|||
self.text.see("insert")
|
||||
self.text.undo_block_stop()
|
||||
|
||||
_last_newline_re = re.compile(r"[ \t]*(\n[ \t]*)?\Z")
|
||||
_last_newline_re = re.compile(r"[ \t]*(\n[ \t]*)?\z")
|
||||
def runit(self):
|
||||
index_before = self.text.index("end-2c")
|
||||
line = self.text.get("iomark", "end-1c")
|
||||
|
|
|
@ -14,7 +14,7 @@ STR_RGX_REPR = (
|
|||
r'(, value:\d)?'
|
||||
r'(, waiters:\d+)?'
|
||||
r'(, waiters:\d+\/\d+)?' # barrier
|
||||
r')\]>\Z'
|
||||
r')\]>\z'
|
||||
)
|
||||
RGX_REPR = re.compile(STR_RGX_REPR)
|
||||
|
||||
|
|
|
@ -300,7 +300,7 @@ class GCTests(unittest.TestCase):
|
|||
# We're mostly just checking that this doesn't crash.
|
||||
rc, stdout, stderr = assert_python_ok("-c", code)
|
||||
self.assertEqual(rc, 0)
|
||||
self.assertRegex(stdout, rb"""\A\s*func=<function at \S+>\s*\Z""")
|
||||
self.assertRegex(stdout, rb"""\A\s*func=<function at \S+>\s*\z""")
|
||||
self.assertFalse(stderr)
|
||||
|
||||
@refcount_test
|
||||
|
|
|
@ -1001,7 +1001,7 @@ from not_a_module import symbol
|
|||
|
||||
expected_error = error + (
|
||||
rb" \(consider renaming '.*numpy.py' if it has the "
|
||||
rb"same name as a library you intended to import\)\s+\Z"
|
||||
rb"same name as a library you intended to import\)\s+\z"
|
||||
)
|
||||
|
||||
popen = script_helper.spawn_python(os.path.join(tmp, "numpy.py"))
|
||||
|
@ -1022,14 +1022,14 @@ from not_a_module import symbol
|
|||
f.write("this_script_does_not_attempt_to_import_numpy = True")
|
||||
|
||||
expected_error = (
|
||||
rb"AttributeError: module 'numpy' has no attribute 'attr'\s+\Z"
|
||||
rb"AttributeError: module 'numpy' has no attribute 'attr'\s+\z"
|
||||
)
|
||||
popen = script_helper.spawn_python('-c', 'import numpy; numpy.attr', cwd=tmp)
|
||||
stdout, stderr = popen.communicate()
|
||||
self.assertRegex(stdout, expected_error)
|
||||
|
||||
expected_error = (
|
||||
rb"ImportError: cannot import name 'attr' from 'numpy' \(.*\)\s+\Z"
|
||||
rb"ImportError: cannot import name 'attr' from 'numpy' \(.*\)\s+\z"
|
||||
)
|
||||
popen = script_helper.spawn_python('-c', 'from numpy import attr', cwd=tmp)
|
||||
stdout, stderr = popen.communicate()
|
||||
|
|
|
@ -6740,7 +6740,7 @@ class TimedRotatingFileHandlerTest(BaseFileTest):
|
|||
rotator = rotators[i]
|
||||
candidates = rotator.getFilesToDelete()
|
||||
self.assertEqual(len(candidates), n_files - backupCount, candidates)
|
||||
matcher = re.compile(r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}\Z")
|
||||
matcher = re.compile(r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}\z")
|
||||
for c in candidates:
|
||||
d, fn = os.path.split(c)
|
||||
self.assertStartsWith(fn, prefix+'.')
|
||||
|
|
|
@ -19,7 +19,7 @@ strtod_parser = re.compile(r""" # A numeric string consists of:
|
|||
(?P<int>\d*) # having a (possibly empty) integer part
|
||||
(?:\.(?P<frac>\d*))? # followed by an optional fractional part
|
||||
(?:E(?P<exp>[-+]?\d+))? # and an optional exponent
|
||||
\Z
|
||||
\z
|
||||
""", re.VERBOSE | re.IGNORECASE).match
|
||||
|
||||
# Pure Python version of correctly rounded string->float conversion.
|
||||
|
|
|
@ -65,7 +65,7 @@ class AbstractWidgetTest(AbstractTkTest):
|
|||
orig = widget[name]
|
||||
if errmsg is not None:
|
||||
errmsg = errmsg.format(re.escape(str(value)))
|
||||
errmsg = fr'\A{errmsg}\Z'
|
||||
errmsg = fr'\A{errmsg}\z'
|
||||
with self.assertRaisesRegex(tkinter.TclError, errmsg or ''):
|
||||
widget[name] = value
|
||||
self.assertEqual(widget[name], orig)
|
||||
|
|
|
@ -490,7 +490,7 @@ class ComboboxTest(EntryTest, unittest.TestCase):
|
|||
width = self.combo.winfo_width()
|
||||
x, y = width - 5, 5
|
||||
if sys.platform != 'darwin': # there's no down arrow on macOS
|
||||
self.assertRegex(self.combo.identify(x, y), r'.*downarrow\Z')
|
||||
self.assertRegex(self.combo.identify(x, y), r'.*downarrow\z')
|
||||
self.combo.event_generate('<Button-1>', x=x, y=y)
|
||||
self.combo.event_generate('<ButtonRelease-1>', x=x, y=y)
|
||||
|
||||
|
@ -1250,7 +1250,7 @@ class SpinboxTest(EntryTest, unittest.TestCase):
|
|||
height = self.spin.winfo_height()
|
||||
x = width - 5
|
||||
y = height//2 - 5
|
||||
self.assertRegex(self.spin.identify(x, y), r'.*uparrow\Z')
|
||||
self.assertRegex(self.spin.identify(x, y), r'.*uparrow\z')
|
||||
self.spin.event_generate('<ButtonPress-1>', x=x, y=y)
|
||||
self.spin.event_generate('<ButtonRelease-1>', x=x, y=y)
|
||||
self.spin.update_idletasks()
|
||||
|
@ -1260,7 +1260,7 @@ class SpinboxTest(EntryTest, unittest.TestCase):
|
|||
height = self.spin.winfo_height()
|
||||
x = width - 5
|
||||
y = height//2 + 4
|
||||
self.assertRegex(self.spin.identify(x, y), r'.*downarrow\Z')
|
||||
self.assertRegex(self.spin.identify(x, y), r'.*downarrow\z')
|
||||
self.spin.event_generate('<ButtonPress-1>', x=x, y=y)
|
||||
self.spin.event_generate('<ButtonRelease-1>', x=x, y=y)
|
||||
self.spin.update_idletasks()
|
||||
|
|
|
@ -86,7 +86,7 @@ class TextWrapper:
|
|||
-(?: (?<=%(lt)s{2}-) | (?<=%(lt)s-%(lt)s-))
|
||||
(?= %(lt)s -? %(lt)s)
|
||||
| # end of word
|
||||
(?=%(ws)s|\Z)
|
||||
(?=%(ws)s|\z)
|
||||
| # em-dash
|
||||
(?<=%(wp)s) (?=-{2,}\w)
|
||||
)
|
||||
|
@ -107,7 +107,7 @@ class TextWrapper:
|
|||
sentence_end_re = re.compile(r'[a-z]' # lowercase letter
|
||||
r'[\.\!\?]' # sentence-ending punct.
|
||||
r'[\"\']?' # optional end-of-quote
|
||||
r'\Z') # end of chunk
|
||||
r'\z') # end of chunk
|
||||
|
||||
def __init__(self,
|
||||
width=70,
|
||||
|
|
|
@ -132,7 +132,7 @@ ContStr = group(StringPrefix + r"'[^\n'\\]*(?:\\.[^\n'\\]*)*" +
|
|||
group("'", r'\\\r?\n'),
|
||||
StringPrefix + r'"[^\n"\\]*(?:\\.[^\n"\\]*)*' +
|
||||
group('"', r'\\\r?\n'))
|
||||
PseudoExtras = group(r'\\\r?\n|\Z', Comment, Triple)
|
||||
PseudoExtras = group(r'\\\r?\n|\z', Comment, Triple)
|
||||
PseudoToken = Whitespace + group(PseudoExtras, Number, Funny, ContStr, Name)
|
||||
|
||||
# For a given string prefix plus quotes, endpats maps it to a regex
|
||||
|
|
|
@ -460,7 +460,7 @@ def _check_bracketed_netloc(netloc):
|
|||
# https://www.rfc-editor.org/rfc/rfc3986#page-49 and https://url.spec.whatwg.org/
|
||||
def _check_bracketed_host(hostname):
|
||||
if hostname.startswith('v'):
|
||||
if not re.match(r"\Av[a-fA-F0-9]+\..+\Z", hostname):
|
||||
if not re.match(r"\Av[a-fA-F0-9]+\..+\z", hostname):
|
||||
raise ValueError(f"IPvFuture address is invalid")
|
||||
else:
|
||||
ip = ipaddress.ip_address(hostname) # Throws Value Error if not IPv6 or IPv4
|
||||
|
|
|
@ -37,9 +37,9 @@ class Translator:
|
|||
Apply '(?s:)' to create a non-matching group that
|
||||
matches newlines (valid on Unix).
|
||||
|
||||
Append '\Z' to imply fullmatch even when match is used.
|
||||
Append '\z' to imply fullmatch even when match is used.
|
||||
"""
|
||||
return rf'(?s:{pattern})\Z'
|
||||
return rf'(?s:{pattern})\z'
|
||||
|
||||
def match_dirs(self, pattern):
|
||||
"""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue