From 0af9f1b671774d479c75e90b9c2deafbc23a55df Mon Sep 17 00:00:00 2001 From: Derek Gulbranson Date: Wed, 1 Jul 2026 21:37:02 -0700 Subject: [PATCH] chore: remove unneeded re.U/re.UNICODE flags Python 2 support was dropped, and in Python 3 str patterns are Unicode-aware by default, making re.U/re.UNICODE a no-op. Strip it from the compiled regexes in config and the tests that mirror them. Co-Authored-By: Claude Sonnet 5 --- nameparser/config/regexes.py | 32 +++++++++++++++----------------- tests/test_constants.py | 6 +++--- tests/test_nicknames.py | 12 ++++++------ tests/test_python_api.py | 4 ++-- 4 files changed, 26 insertions(+), 28 deletions(-) diff --git a/nameparser/config/regexes.py b/nameparser/config/regexes.py index a15f873..39493c6 100644 --- a/nameparser/config/regexes.py +++ b/nameparser/config/regexes.py @@ -4,34 +4,32 @@ re_emoji = re.compile('[' # lgtm[py/overly-large-range] '\U0001F300-\U0001F64F' '\U0001F680-\U0001F6FF' - '\u2600-\u26FF\u2700-\u27BF]+', - re.UNICODE) + '\u2600-\u26FF\u2700-\u27BF]+') EMPTY_REGEX = re.compile('') REGEXES = set([ - ("spaces", re.compile(r"\s+", re.U)), - ("word", re.compile(r"(\w|\.)+", re.U)), - ("mac", re.compile(r'^(ma?c)(\w{2,})', re.I | re.U)), - ("initial", re.compile(r'^(\w\.|[A-Z])?$', re.U)), - ("quoted_word", re.compile(r'(? None: def test_can_add_global_extra_nickname_delimiter(self) -> None: # https://github.com/derek73/python-nameparser/issues/112 hn = HumanName("") - hn.C.extra_nickname_delimiters['curly_braces'] = re.compile(r'\{(.*?)\}', re.U) + hn.C.extra_nickname_delimiters['curly_braces'] = re.compile(r'\{(.*?)\}') hn2 = HumanName("Benjamin {Ben} Franklin") self.assertEqual(hn2.has_own_config, False) self.m(hn2.nickname, "Ben", hn2) @@ -141,7 +141,7 @@ def test_pickle_roundtrip_preserves_customizations(self) -> None: c.titles.add('customtitle') c.prefixes.add('customprefix') c.titles.remove('hon') - c.extra_nickname_delimiters['curly_braces'] = re.compile(r'\{(.*?)\}', re.U) + c.extra_nickname_delimiters['curly_braces'] = re.compile(r'\{(.*?)\}') # Safe: round-tripping a Constants the test just built, not untrusted data. restored = pickle.loads(pickle.dumps(c)) @@ -209,7 +209,7 @@ def test_extra_nickname_delimiters_deepcopy_roundtrip(self) -> None: rather than only incidentally via conftest's autouse snapshot/restore. """ c = Constants() - c.extra_nickname_delimiters['curly_braces'] = re.compile(r'\{(.*?)\}', re.U) + c.extra_nickname_delimiters['curly_braces'] = re.compile(r'\{(.*?)\}') dup = copy.deepcopy(c.extra_nickname_delimiters) diff --git a/tests/test_nicknames.py b/tests/test_nicknames.py index 4bd14b0..acf64ca 100644 --- a/tests/test_nicknames.py +++ b/tests/test_nicknames.py @@ -21,7 +21,7 @@ def test_add_custom_nickname_delimiter(self) -> None: hn = HumanName("Benjamin {Ben} Franklin", constants=None) # curly braces aren't a recognized delimiter by default self.m(hn.nickname, "", hn) - hn.C.extra_nickname_delimiters['curly_braces'] = re.compile(r'\{(.*?)\}', re.U) + hn.C.extra_nickname_delimiters['curly_braces'] = re.compile(r'\{(.*?)\}') hn.parse_full_name() self.m(hn.first, "Benjamin", hn) self.m(hn.last, "Franklin", hn) @@ -29,7 +29,7 @@ def test_add_custom_nickname_delimiter(self) -> None: def test_remove_custom_nickname_delimiter(self) -> None: hn = HumanName("Benjamin {Ben} Franklin", constants=None) - hn.C.extra_nickname_delimiters['curly_braces'] = re.compile(r'\{(.*?)\}', re.U) + hn.C.extra_nickname_delimiters['curly_braces'] = re.compile(r'\{(.*?)\}') hn.parse_full_name() self.m(hn.nickname, "Ben", hn) del hn.C.extra_nickname_delimiters['curly_braces'] @@ -40,8 +40,8 @@ def test_multiple_custom_nickname_delimiters_together(self) -> None: # Two extras registered at once must both be recognized in a single # parse, independent of insertion order. hn = HumanName("Benjamin {Ben} Franklin", constants=None) - hn.C.extra_nickname_delimiters['curly_braces'] = re.compile(r'\{(.*?)\}', re.U) - hn.C.extra_nickname_delimiters['angle_brackets'] = re.compile(r'<(.*?)>', re.U) + hn.C.extra_nickname_delimiters['curly_braces'] = re.compile(r'\{(.*?)\}') + hn.C.extra_nickname_delimiters['angle_brackets'] = re.compile(r'<(.*?)>') hn.parse_full_name() self.m(hn.first, "Benjamin", hn) self.m(hn.last, "Franklin", hn) @@ -53,7 +53,7 @@ def test_overriding_builtin_regex_still_affects_nickname_parsing(self) -> None: # parse_nicknames() also consults extra_nickname_delimiters. hn = HumanName("Benjamin [Ben] Franklin", constants=None) self.m(hn.nickname, "", hn) - hn.C.regexes['parenthesis'] = re.compile(r'\[(.*?)\]', re.U) + hn.C.regexes['parenthesis'] = re.compile(r'\[(.*?)\]') hn.parse_full_name() self.m(hn.first, "Benjamin", hn) self.m(hn.last, "Franklin", hn) @@ -193,7 +193,7 @@ def test_ambiguous_suffix_acronym_in_extra_delimiter_stays_nickname(self) -> Non # handle_match() is applied uniformly regardless of which delimiter # matched, not just the three built-ins. hn = HumanName("JEFFREY {JD} BRICKEN", constants=None) - hn.C.extra_nickname_delimiters['curly_braces'] = re.compile(r'\{(.*?)\}', re.U) + hn.C.extra_nickname_delimiters['curly_braces'] = re.compile(r'\{(.*?)\}') hn.parse_full_name() self.m(hn.nickname, "JD", hn) self.m(hn.suffix, "", hn) diff --git a/tests/test_python_api.py b/tests/test_python_api.py index 6ec18d9..a8acb76 100644 --- a/tests/test_python_api.py +++ b/tests/test_python_api.py @@ -298,7 +298,7 @@ def test_override_constants(self) -> None: self.assertIs(hn.C, C) def test_override_regex(self) -> None: - var = TupleManager([("spaces", re.compile(r"\s+", re.U)),]) + var = TupleManager([("spaces", re.compile(r"\s+")),]) C = Constants(regexes=var) hn = HumanName(constants=C) self.assertTrue(hn.C.regexes == var) @@ -340,7 +340,7 @@ def test_override_conjunctions(self) -> None: self.assertTrue(sorted(hn.C.conjunctions) == sorted(var)) def test_override_capitalization_exceptions(self) -> None: - var = TupleManager([("spaces", re.compile(r"\s+", re.U)),]) + var = TupleManager([("spaces", re.compile(r"\s+")),]) C = Constants(capitalization_exceptions=var) hn = HumanName(constants=C) self.assertTrue(hn.C.capitalization_exceptions == var)