微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用正则表达式是否可以检测使用的项目符号类型及其顺序以根据项目符号层次结构自动缩进文本?

如何解决使用正则表达式是否可以检测使用的项目符号类型及其顺序以根据项目符号层次结构自动缩进文本?

我正在解析填充了不同类型要点的不同 PDF 文本块,由于缺少缩进,该文本相当难以阅读。它有时也会丢失或添加额外的换行符。

我想编写一个脚本,在使用 10-20 个不同的项目符号点正则表达式之前删除额外的换行符来跟踪哪些项目符号点出现以及以什么顺序出现,然后自动将 1 个缩进应用于首先出现的任何类型的项目符号点,两个到下一个,然后三个,依此类推。它还添加了前面的换行符,以确保每个项目符号点都在一个新行上。

典型的要点包括使用以下符号组合的要点

  1. 资本利兹
  2. 小写字母
  3. 罗马数字
  4. 数字
  5. • 或“o”

并且可以包裹

  • ")" 结尾
  • "-" 结尾,中间可能有一个空格
  • "(" 和 ")" 开头和结尾
  • “。”最后

我为所有这些选项编写了一个包含 20 个正则表达式的脚本

  • 跟踪这些正则表达式与文档不同部分的匹配顺序
  • 根据此顺序将正则表达式添加到数组中
  • 遍历这些正则表达式,用 "\n" + 元素替换每个匹配的元素
  • 根据数组中的正则表达式位置应用不同数量的缩进

不幸的是,我发现由于大量误报,它很快就会崩溃。我想知道是否有更好的方法来执行此操作或我可以使用预构建的库/函数

解决方法

注意:这不是您问题的 100% 答案,因为这需要大量代码,只是您可以构建以解决这个棘手问题的一些东西。

如上所述,如果我是你,我会用你自己的方案替换所有的项目符号/字母。如果你想根据你找到的第一个使用项目符号/字母,你需要创建另一个变量,当你找到一个带有前缀的句子时,将它设置为第一个 true,然后基于该类型,添加项目符号.

let sentence = `a) Lorem ipsum dolor sit amet,consectetur adipiscing elit. Morbi pulvinar viverra feugiat. Aliquam in metus nec tortor porttitor posuere. Aliquam id ligula tincidunt,ullamcorper libero vitae,iaculis tortor. Cras venenatis ullamcorper sapien,id porttitor mi finibus et. Integer faucibus dapibus justo eu ornare. Aenean sit amet lacus scelerisque ex posuere vestibulum et ut sapien. Donec vitae orci id leo auctor dignissim.

1. Nam pellentesque neque et ipsum feugiat tempus. Ut lobortis risus non sem iaculis,sed efficitur sapien lobortis. Curabitur tempus ultrices maximus. Vestibulum ullamcorper elit lorem,pulvinar maximus ligula ultricies ac. Mauris feugiat arcu non odio elementum,sit amet luctus sem convallis. Maecenas condimentum nulla turpis,id vestibulum leo porta id. Proin et pretium mauris. Nam eu metus non velit ullamcorper bibendum. Aenean nec purus consequat,pharetra libero vitae,gravida dolor. In a felis sodales,tincidunt justo non,vulputate orci. Morbi interdum erat ante,vel imperdiet lectus condimentum non. Morbi sed mattis felis,consectetur dictum sapien. Nulla vestibulum blandit facilisis.
b) In eget nunc ac quam rutrum rhoncus. Sed tempor,est quis tincidunt sollicitudin,enim nibh aliquet turpis,id interdum orci purus eget orci. Suspendisse vestibulum orci quis rutrum bibendum. In ligula orci,dapibus in vehicula id,varius molestie ante. In hac habitasse platea dictumst. Etiam quis sollicitudin leo,et porta urna. Maecenas vitae feugiat elit.
`

const testForPrefix = (sentence) => {
  // Return if a letter is followed by a ')'
  if (/^[A-Z]+[)]/i.test(sentence)) return true;
    return !/^[A-Z]/i.test(sentence);
};

const removePrefix = (sentence) => {
  while (testForPrefix(sentence) && sentence.length > 0) {
    sentence = sentence.substring(1);
  }
  return sentence;
};

sentence
  .split('\n') // split on each new line
  .filter((line) => line.length) // filter out lines with no length
  .map((line,i) => {
    // Test and remove the prefix.
    console.log(`. ${removePrefix(line)}`);
  });

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。