vba - 将字符串和行的其余部分替换为其他字符串

标签 vba replace ms-word find wildcard

这就是我想做的:

我有一个字符串 origStr,它位于 Word 文档中一行的开头。 origStr后面是一个未知值(例如23或2,6)

我想找到该字符串并将后面的值替换为另一个已知值,但保留该字符串。

我的Word文档中的示例:

Diam. diastole, mm: 53

[运行 VBA makro,其中用户输入为 54,3]

预期结果:

Diam. diastole, mm: 54,3

实际结果:

Diam. diastole, mm: 54,3 53

这就是我得到的:

origStr = LArray(i, j - 1).Caption & ": *"
replStr = LArray(i, j - 1).Caption & ": " & TBArray(i, j).Text

With ActiveDocument.Content.Find
    .MatchWildcards = True
    .ClearFormatting
    .Text = origStr
    .Replacement.ClearFormatting
    .Replacement.Text = replStr
    .Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindStop
End With

为什么我的旧值没有被删除?

提前致谢!

最佳答案

Word 使用“惰性”模式匹配,这在这种情况下很好,因为否则它只会替换整个文档的其余部分。 Vincent G 给出了一个单词的解决方案(该行的其余部分不超过一个空格),这里有一些更通用的内容:

要让 Word 替换行尾之前的所有内容,您需要将行尾包含到搜索字符串中。 ^l^11换行的控制代码(shift+enter),^12分页符或分节符^13回车符This是我找到的最新“最新”列表。

因此 "yourtext*^11" 将匹配从 "yourtext" 到下一个新行 的所有内容,依此类推。

根据您的格式,它可能是上述任一情况,因此您必须小心。如果您替换 "*^12" 但您的行以 new line 结尾,则您将替换整个段落。

要捕获所有这些,您可以将它们分组:yourtext*[^11^12^13] 将匹配所有内容,直到下一个新行回车符。但是,如果我们替换它,行尾也会被替换,因此我们必须将其包含在替换文本中。我们怎么知道那是什么?

我们可以使用 () 定义子匹配,并使用 \1\2 等在替换文本中使用这些子匹配:

origStr = LArray(i, j - 1).Caption & ": *([^11^12^13])"
replStr = LArray(i, j - 1).Caption & ": " & TBArray(i, j).Text & "\1"

示例:

之前:
before

替换为 origStr = "yourtext*([^11^12^13])"replStr = "yourtext newtext\1" 后: after


注意:这些表达式也适用于“查找和替换”对话框,只需确保启用“使用通配符”即可

关于vba - 将字符串和行的其余部分替换为其他字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39161462/

相关文章:

PHP - 如何用空格替换破折号?

java - 在 JPanel 中显示 Word 文档

java - 如何在浏览器中显示Word文档文件而不是下载Spring MVC?

VBA 错误代码 "Run Time Error 16, Too Complex"

html - 为正文中的联系人创建带有@Mention 的 Outlook 电子邮件

vba - 使用 Excel 中的数据在 PowerPoint 中触发动画

vba - 如何在 VBA Excel 2016 中查看编译后的子例程的大小?

haskell - Haskell 中子字符串替换的最佳方法

regex - Visual Studio 2008 搜索和替换正则表达式

vba - 如何使用VBA删除Word中的单元格内容?