4

私は、数十個の html ファイルをテキスト ファイルに変換するプロジェクトに取り組んでおり、その仕事を行う置換正規表現式を作成しました。問題は、6 つすべてを連続して適用し、ディレクトリ内の多数のファイルのそれぞれに適用する方法です。正規表現を含む組織の説明を追加しましたが、それらは問題ではないことに注意してください。彼らは仕事をします(^ Jなどを翻訳した後)。問題は、ディレクトリ内の各 (HTML) ファイルに 6 つすべてをプログラムで適用する方法です。

* 1. Delete all until >General Conference<
\(.*^J\)*.*?General Conference
* 2. Delete all <p class="copyright"> and after
^.*<p class="copy\(.*^J\)*
* 3. Strip all tags
\(<.*?>\)*
* 4. Remove whitespace lines
^\s-*^J
* 5. Remove ugly numeric identifier
^\s-*[0-9].*^J
* 6. Remove amp 
&amp; -> &
4

3 に答える 3

4
  1. Dired:C-xC-dディレクトリでディレクトリを開きますRET
  2. m( ) を押して各ファイルを個別にマークするか、( )dired-markなどのメニュー バーの [マーク] メニューで他のメカニズムを使用して、すべてのファイルに 拡張子を付けて、変更するファイルをマークします。*.htmlRETdired-mark-extensionhtml
  3. QregexRETRET ( ) を使用して、正規表現dired-do-query-replace-regexpの例を何も置き換えません。これにはΩmegaの正規表現を使用できます。
  4. 次に、個々の例を で置き換えるかSPC、すべての例をで置き換えることができます!
于 2012-07-21T19:24:58.333 に答える
1

これを実用的に行うことは難しくありません。しかし、慣用的な Emacs の解決策は、2 つのキーボード マクロを記録することです。

  1. 正規表現の置換をそれぞれreplace-regexp1 つのバッファーで実行します。

  2. dired バッファでは、

    1. 次の html に移動 (でC-s)
    2. 別ウィンドウで開く
    3. (1) を別のウィンドウで実行し、dired バッファに戻ります。

次に、(2) をばかげた数値C-u1000か何かで実行します。

于 2012-07-21T17:14:29.157 に答える
0

関数を作成し、それをファイル リストに適用するだけの手順のようです。

これはそれを開始するドラフトです:

(defun my-replacements ()
  (interactive "*")
  (save-restriction
    (widen)
    (save-excursion
      (goto-char (point-min))
      (while (re-search-forward "FIRST-REGEXP" nil t 1)
        (replace-match "FIRST-REPLACEMENT"))

すべてのフォームがカバーされるまで、最後の 3 行を繰り返します。

于 2012-07-24T11:50:58.290 に答える