gpt4 book ai didi

regex - 使用 word VBA 正则表达式提取文本,然后将其作为字符串保存到变量中

转载 作者:行者123 更新时间:2023-12-01 22:58:12 24 4
gpt4 key购买 nike

我正在尝试在 Word VBA 中创建代码,该代码将自动保存(作为 PDF)并根据文档的内容(在文本中而不是在字段中)命名文档。幸运的是格式是标准化的,我已经知道如何保存它。我在其他地方测试了我的正则表达式,以确保它能提取我正在寻找的内容。问题是我需要提取匹配的语句,将其转换为字符串,并将其保存到一个对象(因此我有一些东西要传递给它命名文档的代码)。

我需要匹配的文档部分如下,从“Program”开始到行尾,看起来像:

Program: Program Name (abr)

我为此制定的正则表达式是“Program:[^\n]”

我目前的代码如下,但我不知道如何在事件文档中执行正则表达式,将输出转换为字符串并保存到对象:

Sub RegExProgram()

Dim regEx
Dim pattern As String

Set regEx = CreateObject("VBScript.RegExp")
regEx.IgnoreCase = True
regEx.Global = False
regEx.pattern = "Program\:[^\n]"

(missing code here)

End Sub

欢迎任何想法,如果这很简单并且我只是忽略了一些明显的事情,我很抱歉。这是我的第一个 VBA 项目,我能找到的大部分资源都建议使用正则表达式替换,而不是将提取的文本保存为字符串。谢谢!

最佳答案

试试这个:

您可以找到 RegExp 的文档类 here .

Dim regEx as Object
Dim matchCollection As Object
Dim extractedString As String

Set regEx = CreateObject("VBScript.RegExp")
With regEx
.IgnoreCase = True
.Global = False ' Only look for 1 match; False is actually the default.
.Pattern = "Program: ([^\r]+)" ' Word separates lines with CR (\r)
End With

' Pass the text of your document as the text to search through to regEx.Execute().
' For a quick test of this statement, pass "Program: Program Name (abr)"
set matchCollection = regEx.Execute(ActiveDocument.Content.Text)

' Extract the first submatch's (capture group's) value -
' e.g., "Program Name (abr)" - and assign it to variable extractedString.
extractedString = matchCollection(0).SubMatches(0)
  • 我已经修改了你的正则表达式,假设你想捕获所有之后 Program:通过行尾;您的原始正则表达式只会捕获 Program:<space> .

    • 附上 [^\r]+ (所有字符。到行尾)在 (...)定义了一个所谓的子表达式(又名捕获组),它允许从整个模式捕获的内容中选择性地仅提取感兴趣的子字符串。
  • .Execute()方法,您将要搜索的字符串传递给该方法,总是返回匹配项(Match 对象)的集合
    .Global属性设置为 False在您的代码中,在这种情况下,输出集合(最多)有 1 个条目(在索引 0 处)。

  • 如果正则表达式有子表达式(在我们的例子中为 1),则匹配集合的每个条目都有一个非空的 .SubMatches集合,每个子表达式都有一个条目,但请注意 .SubMatches条目是字符串,而不是Match对象。

  • Match objects具有属性 .FirstIndex , .Length , 和 Value (捕获的字符串)。自 .Value property 是 default 属性,访问对象本身就足够了,无需引用 .Value属性(例如,您可以使用快捷方式 matchCollection(0).Value 而不是更冗长的 matchCollection(0) 来访问捕获的字符串(完整)(同样,相比之下,.SubMatches 条目只是字符串) .

关于regex - 使用 word VBA 正则表达式提取文本,然后将其作为字符串保存到变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40182260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com