我有一个很大的 docx
文件,其中散布着以下内容:
PART I
PART II
PART III
PART IIIA # part 3, section A
PART IV
PART V
PART VI
PART VII
我正在尝试用 python 编写一个正则表达式,使用 re.match
、re.findall
或 re.search
。我无法找出正确的正则表达式语法来仅提取上述内容 - 并且 SO 或任何地方都没有给出正确提取罗马数字的示例。
有很多关于如何转换/验证的示例,但没有关于简单正则表达式匹配的示例。我正要离开这个:
[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
最佳答案
方括号内的字符仅匹配列出的字符之一,因此在您的情况下,您不应将 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)
关于Python和正则表达式从带有罗马数字的docx中提取标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54990444/