【问题标题】:How do you find the end of a line using RegExp in VBA (Microsoft Word)?如何在 VBA (Microsoft Word) 中使用 RegEx 找到行尾?
【发布时间】:2021-10-21 12:45:33
【问题描述】:

我正在尝试使用正则表达式来查找特定的子字符串及其之后的所有内容,直到下一行。例如:

These are numbers: one, two, three
These are colors: yellow, blue, green

我想查找字符串“数字:一、二、三”,我使用了以下模式:

Public Sub TEST()
        
    Set regex = CreateObject("VBScript.RegExp")
    regex.Global = True
    
    For Each Match In findRegEx(ActiveDocument.Range, "numbers: .*")
        Debug.Print Match.Value
    Next
End Sub

我发现的“通配符”元字符的每一个解释都让我相信它会为换行符定位每个字符除了,但是这种模式也返回第二行而不是第一行。我不确定我是否误解了 Word 中通配符或换行符的性质。

【问题讨论】:

  • 请包含您用于运行此正则表达式的代码,而不仅仅是正则表达式本身。
  • 也许你的正则表达式使用numbers: .*\r
  • 我试过\r,也没用。
  • 行尾究竟是回车还是别的什么?
  • 这是个问题,我不知道行尾的确切含义。我试过\r\nvbCrvbNewlineChr(13),都没有产生预期的结果。

标签: regex vba ms-word newline wildcard


【解决方案1】:

要求正则表达式匹配行尾字符。

因此,将"numbers: .*" 替换为"numbers: [^\n]*",可以将其解读为“匹配以'数字:'和任何非行尾字符开头的字符串”。

如果您的字符串使用其他行尾字符,则必须将 \n 调整为一个或一个组合,这可能是常见的情况 \n \r。

不要尝试使用vbCrvbNewLineChr(13) 作为模式定义的一部分——这些是文字。正则表达式语法需要特殊符号来指示这些值。


请注意,冒号 ':' 后面有一个空格。

【讨论】:

  • 这成功了!几乎。我可以制作的唯一行尾字符是 Chr(13): "numbers: [^] & Chr(13) & "]*" 这按预期工作。谢谢!
  • 谢谢多米尼克 - 我会在检查一些细节后调整答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-02
  • 2014-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 2020-10-15
相关资源
最近更新 更多