本帖最後由 chi251155 於 2016-9-21 18:14 編輯

回覆 9# EITCo
上面個post係覆你,但我改左寫番係呢到
不過澄清番,理論上re真係parse唔到xml,因為冇backtrace個open tag,但實際上你唔會有無限個nested tag,所以樓主個case係parse得到
因為xml係唔regular,所以就咁用re係parse唔到,但加個memory stack就可以,但加左就唔叫re,哈哈
但vim既re matching其實support backtracing,所以用vim既re可以做到樓主想做既野
http://stackoverflow.com/questio ... l-explanation-in-la

TOP

本帖最後由 BenchPlayer 於 2016-9-22 01:57 編輯

兩位功德無量
攞住BNO 想係英國脫歐前
入藉德國的人有福鳥
因為我想將部 字典.ePub檔 變晒做 anki記憶卡.apkg檔
anki要求滙入檔的格式
  1. foo bar; bar baz; baz quux
  2. apple; banana; grape
複製代碼
但係你哋恁快手做徂

我原意係想:
將字典入面每個 entry 的後面都加個分號
便可以滙入 anki 變成記憶卡 更重要是可以讓用家自己編輯內容 加入解釋
  1. 單字1; 字義解釋; optional; optional; ...
  2. 單字2; 字義解釋; optional; optional; ...
  3. 單字3; 字義解釋; optional; optional; ...
複製代碼
在每對<span class="bold">單字1</span>後面加分號
變成
<span class="bold">單字1</span>; // 加分號

find and replace all

    <span class="bold">
    <span class="underline">
    *contents are different
    </span>
    </span>

to

    <h2> //
    <span class="underline">
    *contents are different
    </span>
    </h2 > // 原本以為 text 入面無<h2>, 但我打開檔案發覺 有些不應該轉的地方也出現<h2>, 可能要揀過另一款更少用的tag

and then back to

    <span class="bold">
    <span class="underline">
    *contents are different
    </span>
    </span>; // <--目的是想在</span>後面加分號

TOP

回覆 12# BenchPlayer


    用番條link再down,我update左

TOP

本帖最後由 BenchPlayer 於 2016-9-21 20:25 編輯

(合掌) 求下你地 可唔可以幫我做得完美尐
之前我只係為徂令問題精晰 所以簡化徂個問題

最多我醒套私伙日語字卡畀你地看門口 (已經無得下載) 7個月便可以速政N1
Anki日語句讀卡 core 2000
當然你們有份參予的 "Collins德語字卡.apkg" 也有權擁有一套copy

由於 ePub入面每項 單字 都被 段落 包住
<p class="calibre_11">*</p> 如下
  1. <p class="calibre_11">
  2. <span class="bold">
  3. <span class="underline">
  4. 單字1
  5. </span>
  6. </span>
  7. 字義解釋1
  8. </p>

  9. <p class="calibre_11">
  10. <span class="bold">
  11. <span class="underline">
  12. 單字2
  13. </span>
  14. </span>
  15. 字義解釋2
  16. </p>
複製代碼
所以並不是每個
<span class="bold">*</span>
後面都要加分號 轉成
<span class="bold">*</span>; //加分號

只有前面有<p class="calibre_11"> 的那對 <span class="bold">*</span>
才需要加分號 變成
  1. <p class="calibre_11">
  2. <span class="bold">
  3. 單字1
  4. </span>; //<--加分號
  5. 字義解釋1
  6. </p>
複製代碼
所以原本應該做的動作是
find and replace all
  1. <p class="calibre_11">
  2. <span class="bold">
  3. <span class="underline">
  4. 單字1
  5. </span>
  6. </span>
  7. 字義解釋1
  8. </p>
複製代碼
to
  1. <p class="calibre_11">
  2. <span class="bold">
  3. <span class="underline">
  4. 單字1
  5. </span>
  6. </span>; //<--目的是想在</span>後面加分號
  7. 字義解釋1
  8. </p>
複製代碼

TOP

本帖最後由 BenchPlayer 於 2016-9-22 03:04 編輯

其實更加準確的做法是:
每個段落<p class="calibre_11">*</p>入面的 第一個 break line
  1. <br class="calibre1"/>
複製代碼
前面加分號 變成
  1. ;<br class="calibre1"/> //前面加分號
複製代碼
不過這已經不是 find and replace

這個 "新加的分號" 是給 anki 辨別格式用 的 "保留字"
所以 加入 這個 "新的分號" 之前 要取消 text 入面所有 "舊分號"
取消 所有 "舊分號" 後 會編譯 不到 因為 <分段間隔> 會被毁壞
  1.    <div class="calibre_10">
  2.         //<--這個分號被刪除的話 文章會 編譯 唔到
  3.     </div>
複製代碼
但係無所謂 我就係要 這份 編譯唔到 的text
因為 上面 這個  <分段間隔> 原本都會刪除唔要

原本我以為可以自己做 假如我學懂"加新分號"的方法的話
但是現在只能像跛了似的麻煩你們

TOP

本帖最後由 BenchPlayer 於 2016-9-22 02:03 編輯

只要加到分號 就等如做了一半
因為 anki 可以接受 html tag
  1. <span class="bold">單字1</span>; 字義解釋1; optional; optional; ...
  2. <span class="bold">單字2</span>; 字義解釋2; optional; optional; ...
  3. <span class="bold">單字2</span>; 字義解釋3; optional; optional; ...
複製代碼
其餘步驟都可以滙出做MSword搞掂
取消所有 next line
取消所有 <p class="calibre_11">
將所有 </p> 轉做 next line

TOP

本帖最後由 EITCo 於 2016-9-21 23:29 編輯

回覆 15# BenchPlayer


https://www.dropbox.com/s/6alv5z ... dition%29.epub?dl=0
按上面做法更新左

另外用regex replace都得嘅
  1. (<p class="calibre_11">.*?)(<br class="calibre1" ?/?>.*?</p>)
  2. \1;\2
複製代碼
第一行find,第二行replace
要指定 . does not match newline (或可能叫single line mode之類)

無論由Dropbox下載定用regex都望望有無出錯

TOP

回覆 11# chi251155


完全同意
我正係咁意思

TOP