2022年2月16日 星期三

Notepad++ : 用「規則運算式」轉文字為試算表格式

2022年2月16日 星期三

看到南一出版社有在 Google Drive 中分享課本與習作的 PDF 檔,趕緊把英文課本的附錄下載並複製單字片語來用。是說我前幾天才自己用鍵盤把單字敲完而已,早知道應該先上網看看有沒有電子檔的。

會想複製課本附錄 PDF 中的內容,主要是之前用查網路字典方式製作的 Anki 單字牌集,裡面的例句有時太難,雖然可以讓孩子多學一點,終究還是不小的負擔。既然有課本的,複習為主要目的,當然是以先課本的例句優先。

南一附錄複製下來的文字,格式上大致是有規則的,大概也就手動調整了幾行,刪掉一些頁碼跟小標題字,它就變成一行單字(片語),一行例句的格式了。像這樣:


1 Tuesday [`tjuzde] n. 星期二(= Tue.)
We don’t have English class on Tuesdays.
2 meat-free [mit`fri] adj. 無肉的;素食的
Today is meat-free day at my school.
3 Monday [`mʌnde] n. 星期一(= Mon.)
Let’s go out for dinner on Monday night.
4 vegetable [`vɛdʒətəbỊ] n. 蔬菜
Jerry and his brother don’t like vegetables.


本來還在想,接下來是要用 PHP ,還是 Python ,將它們兩行、兩行,轉成一行以 Tab 為分隔的字串,方便我貼到 Google 試算表中使用。因為資料就貼在 Notepad++,就試著用「規則運算式」來搜尋。哈!Notepad++ 就有「全部取代」的功能,乾脆一次到位就好,根本連程式都不用寫了啦!

用 Notepad++ 的規則運算式轉換格式

因為南一附錄中的單字片語文字的格式,依序可以解析為:

  • 數字、空白
  • 英文
  • [音標]
  • 解譯
  • 換行字元(\r\n)
  • 第二行例句、換行字元(\r\n)

所以用了底下的規則運算式來搜尋:


^\d+\s+([^\[]+)(\[[^\]]*\])([^\r\n]*)\r\n([^\r\n]*)$


稍微分解一下:

  1. ^\d+\s+
  2. ([^\[]+)
  3. (\[[^\]]*\])
  4. ([^\r\n]*)
  5. \r\n
  6. ([^\r\n]*)$

對照一下在做什麼:

  1. 在開頭找出數字和空白。
  2. 一直找,找出不是[的。(規則有加括號,所以此部份為搜尋結果的「 \1」)。
  3. [再加上接著不是]的,最後再加上]。(規則有加括號,所以此部份為搜尋結果的「 \2」)。
  4. 一直找,找出不是 \r\n 的。(規則有加括號,所以此部份為搜尋結果的「 \3」)。
  5. 換行字元 \r\n。
  6. 一直找,找出不是 \r\n 的,到行末結束。(規則有加括號,所以此部份為搜尋結果的「 \4」)。

上面「規則運算式」找到的,就用下面的規則來「全部取代」:


\1\t\2\t\3\t\4


也就是用前面「規則運算式」找到的結果 \1、\2、\3、\4 之間都加上 Tab 字元 \t。因為最後的結果 \4 本身就有換行字元,所以執行完「全部取代」,就變一行行單字片語加例句了;而每一行有以 Tab 字元分隔為四個欄位。

Notepad++ 取代的結果

這樣子可以順利地貼到 Google 試算表中。

貼到試算表中的結果

因為我在不同課間有加上空白行,而它不會屬於被取代的對象,這樣一來,貼到試算表後,我在為不同課加上標籤欄位時,可以很清楚;最後再刪去分隔課別用的五個空白行,就大功告成了。

只能說「規則運算式」(Regular Expression)真是好用!

相關文章


沒有留言:

張貼留言

 
雄::gsyan © 2009. Design by Pocket