【问题标题】:How to Pattern Match an Unknown Number of Characters如何对未知数量的字符进行模式匹配
【发布时间】:2020-07-17 10:43:01
【问题描述】:

首先,我不是很擅长编程。我有一些宏可以帮助我完成工作,但我需要清晰的示例来制作这些宏。

我想在 Word 文档中查找具有多个下划线的任何实例,并将它们替换为一定数量的下划线。连续可能有 30 到 5 个下划线,我希望能够找到这些并用正好 10 个下划线替换它们。下划线最常出现在自己的段落中,但有时它们与文本一起出现。

我在site 和网上浏览了一遍,但我不知道如何使用未知数量的下划线。

如果有人能指出我正确的方向,我将不胜感激。谢谢。

【问题讨论】:

  • 您实际上不需要宏,更不用说正则表达式了。您只需要一个通配符 Find/Replace,其中 Find = _{5,30} Replace = _________
  • 我们可以像您关闭mine 一样关闭这个问题吗?

标签: regex vba ms-word pattern-matching


【解决方案1】:

您需要做的就是使用通配符!

这一行代码就可以做到:

ActiveDocument.Content.Find.Execute "_{5,30}", _
    MatchWildcards:=True, Replace:=wdReplaceAll, _
    ReplaceWith:="__________", Wrap:=wdFindContinue

注意:

{5,30} 部分将保留少于 5 或​​多于 30 的下划线不变。

您可以将其更改为 {,30} 以替换 30 个或更少的下划线

{1,} 替换 1 个或多个下划线

关于通配符的易于理解的文章可以在here找到。

【讨论】:

  • 啊,我不知道这个。非常感谢!
  • 我的回复是否需要任何修改才能将其认可为“已选择”以供其他人学习? Selecting an answer
  • 从您的评论看来,您假设您的答案将被选中。是不是有点自以为是?如果您的兴趣是除非提示,否则 OP 不会选择答案,我建议您编写如下内容,“经过一段时间后,请考虑选择您认为最有帮助的答案,假设至少有一个答案是有帮助。不过,不要着急。”有些人可能会将您的评论解释为迫使 OP 选择您的答案。
  • 感谢您的建议。我同意你的观点,你建议的句子要好得多,但我想提一下,我已经包含了一个链接,该链接告诉所有有关选择答案的信息,以及可以更改的答案。另外,当我写它时,只有两个答案,另一个回答者提到这个答案更好。此外,此评论(没有链接)是从 7.5k 用户 here 复制的。我知道最后一个不是借口。
【解决方案2】:

你可以

1) 将所有“双”下划线替换为“单”下划线,直到只有“单”下划线

2) 将所有“单个”下划线替换为“_____”

With Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting

    Do
        .Text = "__"
        .Replacement.Text = "_"
        .Wrap = wdFindContinue
        .Format = False
        .MatchWholeWord = False

        .Execute Replace:=wdReplaceAll
    Loop While .Found

    .Text = "_"
    .Replacement.Text = "_____"
    .Wrap = wdFindContinue
    .Format = False
    .MatchWholeWord = False

    .Execute Replace:=wdReplaceAll

End With

Selection 更改为您要处理的文档的实际部分(例如ActiveDocument.Content 用于所有文档

【讨论】:

  • 当然,这是一种非常聪明的做法。谢谢!
  • 不客气,但@AbdallahEl-Yaddak 看起来更聪明,虽然我没有尝试过
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多