excel vba - 多行正则表达式不起作用

excel vba - 多行正则表达式不起作用

在 Excel 工作表的 A1 单元格中,单元格内有以下内容:

select a.id, b.type, c.name 
from blah a, 
blah2 b, 
blah3 c
where a.id = b.key
and b.key = c.id
;

以下任一情况均为期望结果:

select 1 from
blah a, 
blah2 b, 
blah3 c
where a.id = b.key
and b.key = c.id
;

或者

select 1
from blah a, 
blah2 b, 
blah3 c
where a.id = b.key
and b.key = c.id
;

我有这个 vba 代码

    Dim objRegExp As New RegExp
    objRegExp.Pattern = "select .+ from"
    objRegExp.Global = True
    objRegExp.MultiLine = True
    regexpReplace =objRegExp.Replace(Trim(Worksheets("new").Range("A1").Value),"select 1 from")
MsgBox regexpReplace

但消息框显示的是单元格 A1 中的准确文本(即没有进行替换)。有人知道为什么会发生这种情况吗?我希望能够跨多行进行替换。

我知道我的正则表达式代码没有问题,因为我尝试将单元格 A1 更改为以下内容(并且它正确地进行了替换):

select a.id, b.type, c.name from
blah a, 
blah2 b, 
blah3 c
where a.id = b.key
and b.key = c.id
;

答案1

你的问题可能是因为.不匹配换行符(我不确定,但是.MultiLine 应该已经改变了这种行为?无论出于何种原因,可能还没有,所以尝试一下。)

尝试:

select.+\n*from

或者可能:

select.+\r\n*from

甚至更好:

select[\s\S]+from

还:

select[\u0000-\uFFFF]+from

前两个表示匹配除换行符之外的所有内容,并且还匹配特定位置的换行符。后两个表示匹配包括换行符在内的所有内容。

答案2

尝试使用此正则表达式

select (.*?)[\r\n|\s]from

答案3

有两个问题:

  1. 正则表达式模式与新行不匹配(正如其他人提到的):使用
    objRegExp.Pattern = "select\s.+\sfrom"\s匹配空格,包括新行)
  2. 将替换模式更改为在"select 1" & vbNewLine & "from"所需位置插入新行

相关内容