# 如何將大量選擇題匯入Anki - ft. 內專考題、RegExr、MDAnki 在內科醫學會我們可以找到已經整理好的[內專考題](http://www.tsim.org.tw/exam/exam108/q4.htm),可以用爬蟲全部抓下來,每一題大概會長這樣: ``` (B) 2. 高血壓的病人初次就醫時,應安排優先做以下評估(initial evaluation),何者除外? A. Hematocrit B. Serum uric acid level C. ECG (electrocardiogram) D. Urinalysis 或 urine albumin excretion E. Serum BUN and Cr, Sodium, potassium ``` * 我們想把這些大量的題目,做成一張張[Anki](https://apps.ankiweb.net)的卡片,如下: ![](https://i.imgur.com/rZK1Nkm.png) * 有人用node.js寫了一個[MDAnki](https://github.com/ashlinchak/mdanki)的套件,在Readme中,作者告訴大家只要在markdown中,以##做為開正面,用「%」分隔正反,就可以完成一張卡片。 ``` ## 正面用用兩個##作為標題 (正面的其他內容) % (背面) ``` * 所以,我們的目標是大量地把題目變成以下格式: ``` ## 2. 高血壓的病人初次就醫時,應安排優先做以下評估(initial evaluation),何者除外? A. Hematocrit B. Serum uric acid level C. ECG (electrocardiogram) D. Urinalysis 或 urine albumin excretion E. Serum BUN and Cr, Sodium, potassium % (C) ``` # 第一步:使用Regex整理題目 > 正規表示式(英語:Regular Expression,常簡寫為regex、regexp或RE),又稱正規表達式、正規表示法、規則運算式、常規表示法,是電腦科學的一個概念。正規表示式使用單個字串來描述、符合一系列符合某個句法規則的字串。在很多文字編輯器裡,正則表達式通常被用來檢索、替換那些符合某個模式的文字。 * 我們可以使用線上的[Regex編輯器](https://regexr.com), * 或用VS code的尋找功能(第三個.*的按鈕) ![](https://i.imgur.com/bl4NWRO.png) * 在hackmd中用Shift-Cmd-Option-F叫出尋找取代也可以 ![](https://i.imgur.com/NbZnEyf.png) ## 再觀察一下題目的規則 ``` (B) 2. 高血壓的病人初次就醫時,應安排優先做以下評估(initial evaluation),何者除外? A. Hematocrit B. Serum uric acid level C. ECG (electrocardiogram) D. Urinalysis 或 urine albumin excretion E. Serum BUN and Cr, Sodium, potassium ``` * 我們可以發現,每一題的結構長這樣: ``` (答案)(一個縮排)(題號+題目) (選項若干) ``` * 我們可以用以下的Regex語法把一個題目選出來,再來做重排 ``` (\([A-E]\))(\t)(.+)((\n[A-E].+)*) ``` * 首先我們可以拆開看成四組小括號 * 第一組括號內的代表我們的答案:由一對小括號括起來的A~E大寫字母 ``` \([A-E]\) 其中: \(代表左括號,加反斜線是因為左括號是保留符號,不加的話會被當成另一組Regex中的群組 [A-E]代表A-E的大寫字母,用中括號括起來 \)代表右括號,同理 ``` > ==(B)== 2. 高血壓的病人初次就醫時,應安排優先做以下評估(initial evaluation),何者除外? A. Hematocrit B. Serum uric acid level C. ECG (electrocardiogram) D. Urinalysis 或 urine albumin excretion E. Serum BUN and Cr, Sodium, potassium * 第二組代表縮排tab ``` \t ``` > (B)==(這裡有個看不見的tab)== 2. 高血壓的病人初次就醫時,應安排優先做以下評估(initial evaluation),何者除外? A. Hematocrit B. Serum uric acid level C. ECG (electrocardiogram) D. Urinalysis 或 urine albumin excretion E. Serum BUN and Cr, Sodium, potassium * 第三組代表一串字,即題目 ``` .代表任意的字元 +代表任意的數字,如果沒有+的話,就只會搜到一個字 ``` > (B) ==2. 高血壓的病人初次就醫時,應安排優先做以下評估(initial evaluation),何者除外?== A. Hematocrit B. Serum uric acid level C. ECG (electrocardiogram) D. Urinalysis 或 urine albumin excretion E. Serum BUN and Cr, Sodium, potassium * 第四組代表我們的選項 ``` \n代表分行符號 [A-E]代表用A-E開始的每行 .+一樣是不限字數的一串字元 然後把上述括起來後加一個*號,代表比對多次,直到不符為止 ``` > (B) 2. 高血壓的病人初次就醫時,應安排優先做以下評估(initial evaluation),何者除外? ==A. Hematocrit B. Serum uric acid level C. ECG (electrocardiogram) D. Urinalysis 或 urine albumin excretion E. Serum BUN and Cr, Sodium, potassium== # 第二步:取代並重排 * 我們要把上述選出來的四組規則變成: ``` ## (題目:第三組) (選項若干:第四組) % (答案:第一組) ``` * 在 https://regexr.com 開啟Replace功能 ![](https://i.imgur.com/3SdMlQY.png) * VS Code則用 ![](https://i.imgur.com/hnbo8wh.png) * 在Regrex中,以$+數字來表示第幾組,所以要重排並加入符號: ``` ## $3$4%$1 ``` * 會得到以下結果: ``` ## 1. 慢性腎臟病(CKD)病人常合併有鈣磷異常,以下有關治療的敘述,何者錯誤? A. 採用低磷飲食(low phosphate diet),有助於預防副甲狀腺高能症(secondary hyperparathyroidism) B. 使用活性維他命D(如: calcitriol)可以抑制副甲狀腺素(parathyroid hormone)分泌,副作用之一是引起高血鈣(hypercalcemia) C. 使用calcimimetic agent(如: cinacalcet)可以抑制副甲狀腺素(parathyroid hormone)分泌,副作用之一是引起高血鈣(hypercalcemia) D. 使用磷結合劑(如: 各式鈣片)可以抑制副甲狀腺素(parathyroid hormone)分泌,副作用之一是引起高血鈣(hypercalcemia) E. 使用sevelamer或lanthanum,可以抑制腸胃道對磷的吸收,但不會引起高血鈣(hypercalcemia)%(C) ``` * %跟選項沒有分行,所以我們要加入一些分行符號\n ``` ## $3$4\n%\n$1\n ``` * 完成 ``` ## 1. 慢性腎臟病(CKD)病人常合併有鈣磷異常,以下有關治療的敘述,何者錯誤? A. 採用低磷飲食(low phosphate diet),有助於預防副甲狀腺高能症(secondary hyperparathyroidism) B. 使用活性維他命D(如: calcitriol)可以抑制副甲狀腺素(parathyroid hormone)分泌,副作用之一是引起高血鈣(hypercalcemia) C. 使用calcimimetic agent(如: cinacalcet)可以抑制副甲狀腺素(parathyroid hormone)分泌,副作用之一是引起高血鈣(hypercalcemia) D. 使用磷結合劑(如: 各式鈣片)可以抑制副甲狀腺素(parathyroid hormone)分泌,副作用之一是引起高血鈣(hypercalcemia) E. 使用sevelamer或lanthanum,可以抑制腸胃道對磷的吸收,但不會引起高血鈣(hypercalcemia) % (C) ``` * 實際操作圖片 ![](https://i.imgur.com/4eSkAtl.png) * 接著把批量處理完的檔案存成.md檔,丟到自己指定的位置 # 使用MDAnki套件 * 安裝[Node.js](https://nodejs.org/en/) * 安裝好後,在終端機輸入: ``` npm install -g mdanki ``` * 如果出現 Error: EACCES: permission denied,可能是權限問題,請輸入下列指令: ``` sudo chown -R 使用者名稱 ~/.npm (這裡會要你打密碼) sudo chown -R 使用者名稱 /usr/local/lib/node_modules ``` * 最後輸入指令 ``` mdanki 你的檔案.md 牌組名稱.apkg ``` ![](https://i.imgur.com/0OpWoCJ.png) # 完成 * 點擊我們的排組: ![](https://i.imgur.com/Jjflr2m.png) * 匯入 ![](https://i.imgur.com/yLGCCLo.png) * 開始學習 ![](https://i.imgur.com/Vo0HMzO.png) * 範例:[腎專五年考題.apkg](https://www.dropbox.com/s/f0hgso6r5jkik4f/%E8%85%8E%E5%B0%88%E4%BA%94%E5%B9%B4%E5%85%A7%E8%80%83%E9%A1%8C.apkg?dl=0)