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
相关产品推荐
相关产品推荐

