大多数现代正则表达式引擎都支持编号的捕获组和编号的反向引用。具有许多组和反向引用的长正则表达式可能难以阅读和理解。除了在正则表达式的中间添加或删除捕获组外,还会干扰跟随已添加或已删除组的所有组的数量。
Python的re模块是第一个提出解决方案的模块:命名捕获组和命名后向引用。(?P <name> group)将组的匹配捕获到后向引用“名称”中。名称必须是以字母开头的字母数字序列。组可以是任何正则表达式。您可以使用命名的反向引用(?P = name)引用组的内容。问号,P,尖括号和等号都是语法的一部分。尽管命名后向引用的语法使用括号,但这只是一个后向引用,不进行任何捕获或分组。HTML标签示例可以写为<(?P <tag> [AZ] [A-Z0-9] *)\ b [^>] *>。*?</(?P = tag)>。