正则表达式获取大写章节标题之间的文本

标签 regex text-extraction pcre2

我正在尝试提取 txt 文件的章节/部分,这些文件是使用葡萄牙诉讼文档上的 pdftotext 生成的。 最初,我尝试使用这个正则表达式,至少获得每个章节的标题:

^[A-Z\s\d\W]+$

显然它适用于此示例:https://regex101.com/r/FQKsy4/1

但是,对于这个:https://regex101.com/r/BEO55p/3

我得到了一些非标题,例如那些比赛:

enter image description here

enter image description here

那么,我怎样才能不仅获得每个章节的标题,而且还获得它们的每个内容?

我尝试使用正则表达式来获取每一章及其内容,但在某些文档中效果不佳

最佳答案

使用 2 个捕获组的方法:

^[^\S\n]*([A-Z][^a-z]*)((?:\n(?![^\S\n]*[A-Z][^a-z\n]*$).*)*)$
  • ^ 字符串开头
  • [^\S\n]* 匹配可选空格,不带换行符
  • ( 捕获组 1
    • [A-Z][^a-z]* 匹配单个大写字符,后跟除小写 a-z 之外的任何字符
  • ) 关闭群组
  • ( 捕获组 2
    • (?:\n(?![^\S\n]*[A-Z][^a-z\n]*$).*)* 可选择重复匹配所有不匹配的行从类似标题的模式开始
  • ) 关闭群组
  • $ 字符串结尾

Regex demo

更像 PCRE 的方法:

^\h*([A-Z][^a-z]*)((?>\R(?!\h*[A-Z][^a-z\r\n]*$).*)*)$

Regex demo

关于正则表达式获取大写章节标题之间的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74853570/

相关文章:

c - 如何在 pcre2_substitute 中设置输出大小

C# 正则表达式验证程序验证

javascript - 有没有办法删除数组中字符串中的换行符?

python - 我应该如何提取 % 分隔标签

php - 不以特定单词开头的正则表达式

regex - 用于验证 URL 中的 '/' 的正则表达式

Java 正则表达式 : select from a set of characters

python - 使用python通过正则表达式提取数据

php - 网页上相关产品的提取价格