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

too*_*oop 2 regex vba macros microsoft-excel

在 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
;
Run Code Online (Sandbox Code Playgroud)

以下任一结果都是期望的结果:

select 1 from
blah a, 
blah2 b, 
blah3 c
where a.id = b.key
and b.key = c.id
;
Run Code Online (Sandbox Code Playgroud)

或者

select 1
from blah a, 
blah2 b, 
blah3 c
where a.id = b.key
and b.key = c.id
;
Run Code Online (Sandbox Code Playgroud)

我有这个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
Run Code Online (Sandbox Code Playgroud)

但消息框显示的文本与单元格 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
;
Run Code Online (Sandbox Code Playgroud)

Bob*_*Bob 5

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

尝试:

select.+\n*from
Run Code Online (Sandbox Code Playgroud)

或者可能:

select.+\r\n*from
Run Code Online (Sandbox Code Playgroud)

更好的是:

select[\s\S]+from
Run Code Online (Sandbox Code Playgroud)

还:

select[\u0000-\uFFFF]+from
Run Code Online (Sandbox Code Playgroud)

前两个意味着匹配除换行符之外的所有内容,并且还匹配特定位置的换行符。最后两个意思是匹配所有内容,包括换行符。

  • +1 表示“选择[\s\S]+from”。 (2认同)