【问题标题】:VBA replace certain carriageVBA替换某些马车
【发布时间】:2019-02-09 01:54:26
【问题描述】:

全部。

我习惯在 Excel 中编写 VBA,但对 Word 中的结构不熟悉。 我正在通过一个文本文件库来更新它们。其中许多是 OCR 文档,或者是手动输入的。

每个都有一个重复的模式,其中最常见的是不必要的回车。

例如,我正在查看几个文本文件,其中每行后面都有一个双回车。搜索和替换所有双回车会删除所有段落区别。 但是,每行大约有 30 个字符长,如果我手动执行以下逻辑,它会给我一个功能文档。

如果在 30+ 个字符后有双回车,我用空格替换它们。 如果在双回车之前少于 30 个字符,我将它们替换为单回车。

谁能帮助我一些可以帮助我开始的基本代码?然后我可以为我拥有的每个文本文档的“模式”修改它。

例如

In this case, there are more than

thirty characters per line.  And I

will keep going to illustrate this

example.

This would be a new paragraph, and

would be separated by another of

the single returns.

我想要返回的代码:

In this case, there are more than thirty character returns. And I will keep going to illustrate this example.
<br>This would be a new paragraph, and would be separated by another of the single returns.

如果有人可以扔出我可以玩的东西,请告诉我!

【问题讨论】:

  • 我试图调整您的示例,因为该网站的格式删除了多余的空格。不知道我是否做对了......我刚刚用一组大文件经历了类似的事情......最后在这个过程中弄清楚了RegEx。这可能是最简单/最快的方法...您使用过 RegEx 吗?此外,这是一次性的事情还是未来需要自动化的事情?如果一次性用于一组文件(或者很少可以手动完成),我可以使用 Notepad++ 进行步骤回答。否则,VBA+RegEx 可能会更好。只是为了确认一下,你说这些是 text* 文件? (不是docx 等)
  • +1 表示 RegEx 和 NP++ 的想法...您可以在 VBA 中使用 RegEx,但需要进行一些设置...您可能想在这里搞砸:regex101.com/r/zG9GPw/1
  • 太好了,谢谢,我会的!
  • @ashleedawg - 我刚刚开始玩了一下我没有使用过 RegEx,但它看起来确实很有用。它本质上是一次性的,所以如果你有使用 Notepad++ 的步骤,那就太好了。是的 - 这些是文本文件,不是 docx 或类似的东西。

标签: vba replace ms-word return paragraph


【解决方案1】:

您可以在没有代码的情况下执行此操作(RegEx 需要),只需使用 Word 自己的通配符查找/替换工具,其中:

Find = ([!^13]{30,})[^13]{1,}
Replace = \1^32

以及,清理剩余的多段断点:

Find = [^13]{2,}
Replace = ^p

当然,您可以将以上内容记录为宏...

【讨论】:

  • 谢谢!我没有玩过查找/替换中的条件语句。我也会使用编码答案,只是为了让我了解这些选项。
  • 谢谢!仍然没有得到我想要的结果,但我刚刚开始研究查找/替换通配符。
  • 您可能会发现msofficeforums.com/word/… 有助于更广泛地处理清理问题。有关通配符的一些有用信息,请参阅wordmvp.com/FAQs/General/UsingWildcards.htm
  • 只是想再次说声谢谢,还在玩。我认为问题在于某些回车符不是同一个字符...它替换了我期望的一些双重回车符,但似乎错过了其中一些。无论如何,会继续玩,除了编码之外,只想对这个选项表示感谢!
  • 第二个 F/R 将用一个单独的回车替换所有重复的回车,但如果您的文档有任何表格,您最终可能会在表格前使用一对回车。也许您的文档也有手动换行符。启用 Word 的格式显示后,您将看到段落分隔符为 ¶ 符号,手动换行符为 ↵ 符号。而且,如果您正在使用表格,它们的单元格结束和行结束标记看起来像 ¤ 符号;您不能通过查找/替换删除它们。
【解决方案2】:

这是一个可能适合您的正则表达式:

(\n\n)(?&lt;!\.(\n\n))

替换只是一个普通的空格,您可以在这里尝试(并修改/调整):https://regex101.com/r/zG9GPw/4

这个“模式”告诉正则表达式引擎寻找换行符\n,它像这样\n\n (值得注意的是,这来自您的问题,并且可能在您的文件中有所不同,例如可能是\r\n) 并且它假设一个有效的换行符将由一个句号进行:\.

在 RegEx 中,句号是单个字符的通配符,因此需要使用 '\' 进行转义(nr 是普通字符,将它们转义告诉 RegEx 引擎它们代表换行符和返回字符)。

所以...表达式正在查找一组 x2 换行符,但随后使用否定的后向查找来排除前一个字符为句号的任何匹配项。

无论如何,这一切都在网站上进行了解释:


以下是使用 NotePad++ 进行 RegEx 查找和替换的方法(我不确定它是否带有 RegEx 或是否需要插件,无论哪种方式都很容易)。但您可以设置位置、过滤器(针对特定文件类型)和其他选项(例如在子目录中搜索)。

除此之外,正如@MacroPod 指出的那样,您还可以使用 MS Word,逐个文档地执行此操作,而不使用任何代码 :)

【讨论】:

  • 谢谢 - 刚开始玩 RegEx 和编码,并从中获得乐趣 - 哈哈 - 但在我获得乐趣之前需要完成这些。将尝试其他一些选项,然后将自学更多! :)
  • @BLP_1975 嘿,单次 NotePad++ 可以轻松完成此操作(假设您使用的是纯文本文件)。我将用 NP++ 的图像更新我的答案
猜你喜欢
  • 2022-01-04
  • 2012-05-18
  • 2015-01-05
  • 2014-10-09
  • 2011-08-22
  • 1970-01-01
  • 1970-01-01
  • 2014-05-03
  • 2020-12-12
相关资源
最近更新 更多