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

Python中匹配前后罗马数字的正确正则表达式求解

用Python正则匹配目录里的前后罗马数字

嘿,我来帮你搞定这个需求!针对你给出的目录文本,我们可以用re.search(或者结合多次搜索)来抓取前后位置的罗马数字章节标记,比如I和II这类。

先理清楚匹配规则

目录里的罗马数字都是大写的,后面跟着一个点,比如I.、II.,所以我们的正则要精准匹配这种格式:

  • 用\b做单词边界,避免误匹配其他单词里的字母(比如INTRODUCTION里的I就不会被抓到)
  • [IVXLCDM]+匹配一个或多个罗马数字字符(覆盖所有常见的大写罗马数字)
  • \.匹配罗马数字后面的点

对应的正则模式就是:r'\b([IVXLCDM]+)\.',括号是捕获组,用来提取罗马数字本身(去掉后面的点)。

具体代码实现

下面分两种方式来写,一种是一次性抓所有罗马数字再取前后两个,另一种是用re.search多次搜索:

import re

# 你的目录文本
table_t = ' Table of Contents I. INTRODUCTION .................................... 1 II. FACTUAL ASPECTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 A. The Clean Air Act . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 B. EPA\'s Gasoline Rule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Establishment of Baselines . . . . . . . . . . . . . . ...'

### 方式1:一次性抓取所有罗马数字,再取前后两个
all_romans = re.findall(r'\b([IVXLCDM]+)\.', table_t)
if len(all_romans) >= 2:
    first_roman = all_romans[0]
    second_roman = all_romans[1]
    print(f"前面的罗马数字:{first_roman}")
    print(f"后面的罗马数字:{second_roman}")
else:
    print("没找到足够的罗马数字章节哦")

### 方式2:用re.search分别找第一个和第二个
# 找第一个罗马数字
first_match = re.search(r'\b([IVXLCDM]+)\.', table_t)
if first_match:
    print(f"\n第一个罗马数字:{first_match.group(1)}")
    # 从第一个匹配结束的位置开始找第二个
    second_match = re.search(r'\b([IVXLCDM]+)\.', table_t, pos=first_match.end())
    if second_match:
        print(f"第二个罗马数字:{second_match.group(1)}")

运行效果

跑这段代码会输出:

前面的罗马数字:I
后面的罗马数字:II

第一个罗马数字:I
第二个罗马数字:II

完美匹配到目录里前后位置的罗马数字啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:14:55