簡體   English   中英

正則表達式是否可以檢測使用的項目符號類型及其順序以根據項目符號層次結構自動縮進文本?

[英]Is detecting bullet point types used and their order to automatically indent text based on bullet point hierarchy possible with Regexes?

我正在解析 PDF 文本的不同塊,其中填充了不同類型的項目符號點,由於缺少縮進,該文本相當難以閱讀。 它有時也會丟失或添加額外的換行符。

我想編寫一個腳本,在使用 10-20 個不同的項目符號正則表達式來跟蹤顯示哪些項目符號點以及以什么順序自動應用 1 個縮進到首先出現的任何類型的項目符號點之前,刪除額外的換行符,兩個到接下來,然后是三個,依此類推。 它還添加了一個前面的換行符,以確保每個項目符號點都在一個新行上。

典型的要點包括使用以下符號組合的要點

  1. 資本租賃
  2. 小寫字母
  3. 羅馬數字
  4. 數字
  5. • 或“o”

並且可以包裹

  • “)“ 在末尾
  • "-" 在末尾,中間可能有一個空格
  • “(”和“)”在開始和結束
  • “。” 在末尾

我為所有這些選項編寫了一個包含 20 個正則表達式的腳本

  • 跟蹤這些正則表達式與文檔不同部分匹配的順序
  • 根據此順序將正則表達式添加到數組
  • 遍歷這些正則表達式,用 "\n" + 元素替換每個匹配的元素
  • 根據數組中的正則表達式 position 應用不同數量的縮進

不幸的是,我發現由於很多誤報,它很快就崩潰了。 我想知道是否有更好的方法或我可以使用的預建庫/函數?

注意:這不是您問題的 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 (/^[AZ]+[)]/i.test(sentence)) return true; return./^[AZ]/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)}`); });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM