4

我正在研究一个将几十个 html 文件转换为文本文件的项目,并编写了完成这项工作的 replace-regexp 公式。问题是,如何连续应用所有六个,然后对目录中的几十个文件中的每一个都这样做?我已经附加了我的组织解释,其中包括正则表达式,但请记住,这些不是问题;他们做他们的工作(在翻译^J等之后)。问题是如何以编程方式将所有六个应用到目录中的每个(HTML)文件?

* 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-ddirectory打开目录RET
  2. 标记要更改的文件,方法是按m( dired-mark) 单独标记每个文件,或在菜单栏中的标记菜单中使用其他机制,例如*.htmlRET( dired-mark-extension) 标记所有带有html 扩展名的文件。
  3. QregexRETRET ( dired-do-query-replace-regexp) 将任何正则表达式示例替换为。您可以为此使用 Ωmega 的正则表达式。
  4. 然后,您可以使用 替换单个示例SPC或所有示例,而无需进一步提问!
于 2012-07-21T19:24:58.333 回答
1

务实地做到这一点并不难。但惯用的 Emacs 解决方案是记录 2 个键盘宏。

  1. replace-regexp在单个缓冲区中执行每个正则表达式替换。

  2. 在干缓冲区中,

    1. 移动到下一个 html (with C-s)
    2. 在其他窗口打开
    3. 在其他窗口中运行 (1) 并切换回 dired 缓冲区。

然后你会用一个荒谬的数字C-u1000或其他东西运行 (2)。

于 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 回答