Python和regex从带有罗马数字的docx中提取标题

2024-10-02 12:24:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个很大的docx文件,其中穿插着以下内容:

PART I
PART II
PART III
PART IIIA  # part 3, section A
PART IV
PART V
PART VI
PART VII

我正试图用python编写一个正则表达式,用re.matchre.findallre.search来实现这些功能。我无法找出正确的正则表达式语法来只提取上面提到的内容——而在SO或anywhere上没有给出一个正确提取罗马数字的例子

关于如何转换/验证的例子很多,但没有简单的正则表达式匹配的例子。我正要离开这里:

[PART].*\s[I]|[II]|[III]|[IIIA]|[IV]|[V]|[VI]|[VII] 

或者

[PART].*\s(?=[MDCLXVI])M*(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$

但那不管用-我把“或”部分搞乱了Best other SO article I could find


Tags: 文件resosection例子iiiiivi
1条回答
网友
1楼 · 发布于 2024-10-02 12:24:10

方括号内的字符只与列出的字符中的一个匹配,因此在您的情况下,不应将PART放在方括号内。最后也不需要$,因为您正在尝试匹配更大字符串中的子字符串

假设输入字符串存储在变量s中,下面对re.findall的调用应返回列表中的所有此类事件:

re.findall(r'PART\s+(?=[MDCLXVI])M{0,4}(?:CM|CD|D?C{0,3})(?:XC|XL|L?X{0,3})(?:IX|IV|V?I{0,3})', s)

演示:https://regex101.com/r/NGdyw3/2

相关问题 更多 >

    热门问题