Python和正则表达式从带有罗马数字的docx中提取标题

标签 python regex

我有一个很大的 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 或任何地方都没有给出正确提取罗马数字的示例。

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

[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)

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

关于Python和正则表达式从带有罗马数字的docx中提取标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54990444/

相关文章:

python - pip安装matplotlib报错,error :/usr/local/man/man1/nosetests. 1: Permission denied

c# - 正则表达式替换 - 忽略链接中的内容

python - 在 Python 中用 NaN 替换一列中的多个字符

java - Java 中的通配符匹配和替换

python - 如何使用json序列化对象

python - OpenCV VideoWriter:播放视频的问题

python - 带有列标题的 pandas isnull 总和

python - 在 matplotlib 图上裁剪文本

正则表达式从数据帧列中提取长度>4的数字

Javascript正则表达式选择多个