您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

重用正则表达式模式的一部分

重用正则表达式模式的一部分

不可以,当使用标准库re模块时,正则表达式 模式 不能被“符号化”。

当然,您始终可以通过重新使用Python变量来做到这一点:

digit_letter_letter_digit = r'\d\w\w\d'

然后使用字符串格式来构建更大的模式:

match(r"{0},{0}".format(digit_letter_letter_digit), inputtext)

或者,使用Python 3.6+ f字符串:

dlld = r'\d\w\w\d'
match(fr"{dlld},{dlld}", inputtext)

我经常使用这种技术从可重复使用的子模式中组成更大,更复杂的模式。

如果您准备安装外部库,则该regex项目可以通过regex子例程调用 解决此问题。该语法(?<digit>)重新使用了已使用(隐式编号)捕获组的模式:

(\d\w\w\d),(?1)
^........^ ^..^
|           \
|             re-use pattern of capturing group 1  
\
  capturing group 1

你可以做同样的 命名 捕获组,其中(?<groupname>...)是命名组groupname,和(?&groupname)(?P&groupname)(?P>groupname)再使用由匹配模式groupname(后两种形式是与其他引擎兼容的替代品)。

最后,regex支持(?(DEFINE)...)块以“定义”子例程模式,而无需在该阶段实际匹配任何子例程。你可以把多个(..)(?<name>...)捕获组在结构,以后来指他们在实际的模式:

(?(DEFINE)(?<dlld>\d\w\w\d))(?&dlld),(?&dlld)
          ^...............^ ^......^ ^......^
          |                    \       /          
 creates 'dlld' pattern      uses 'dlld' pattern twice

明确地说:标准库re模块不支持子例程模式。

其他 2022/1/1 18:38:00 有423人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶