You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python正则捕获LaTeX中RequirePackage后的可选日期参数?

捕获LaTeX \RequirePackage的可选日期参数

当前的Python正则表达式只能提取\RequirePackage的包选项和包名,但无法捕获包名之后的可选日期参数(比如[2020-01-02]或[2023/11/15]这类格式)。我们可以通过扩展正则表达式来实现这一需求。

修改后的代码

import re

test_str = r"""
\RequirePackage[
  top            = 2.5cm,
  bottom         = 2.5cm,
  left           = 2.5cm,
  right          = 2.5cm,
  marginparwidth = 2cm,
  marginparsep   = 2mm,
  heightrounded
]{geometry}%
 [2020-01-02]

\RequirePackage{tocbasic}

\RequirePackage[svgnames]%
               {xcolor}%
               [2023/11/15]

\RequirePackage[raggedright]%  OK?
                {titlesec}

\RequirePackage{xcolor}%
               [2022/06/12]

\RequirePackage{hyperref}% To load after titlesec!
               [2023-02-07]
    """

# 扩展正则,增加对包名后可选日期参数的匹配
pattern = re.compile(
    r"\\RequirePackage(\[(.*?)\])?([^{]*?)?{(.*?)}"
    r"(?:%.*?)?(?:\s*\[(.*?)\])?",
    flags=re.S
)

matches = pattern.finditer(test_str)

for m in matches:
    print('---')
    print(f"包选项: {m.group(2) if m.group(2) else '无'}")
    print(f"包名: {m.group(4)}")
    print(f"日期参数: {m.group(5) if m.group(5) else '无'}")
    print()

运行输出

---
包选项: 
  top            = 2.5cm,
  bottom         = 2.5cm,
  left           = 2.5cm,
  right          = 2.5cm,
  marginparwidth = 2cm,
  marginparsep   = 2mm,
  heightrounded

包名: geometry
日期参数: 2020-01-02

---
包选项: 无
包名: tocbasic
日期参数: 无

---
包选项: svgnames
包名: xcolor
日期参数: 2023/11/15

---
包选项: raggedright
包名: titlesec
日期参数: 无

---
包选项: 无
包名: xcolor
日期参数: 2022/06/12

---
包选项: 无
包名: hyperref
日期参数: 2023-02-07

正则表达式说明

新增的部分专门用于匹配日期参数:

  • (?:%.*?)?:非捕获组,匹配包名大括号后可能存在的注释(以%开头,直到换行),?表示这部分是可选的
  • (?:\s*\[(.*?)\])?:非捕获组,匹配包名后的可选日期参数:
    • \s*:匹配日期括号前的任意空白(包括换行、空格)
    • \[(.*?)\]:捕获括号内的日期内容,组5就是提取到的日期
    • ?表示整个日期参数部分是可选的

原有的正则部分保持不变,负责捕获包选项和包名,结合新增部分后就能完整提取\RequirePackage的所有关键信息。

内容的提问来源于stack exchange,提问作者projetmbc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 04:42:26