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)
你的问题可能是因为与.
换行符不匹配(我不确定,但.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)
前两个意味着匹配除换行符之外的所有内容,并且还匹配特定位置的换行符。最后两个意思是匹配所有内容,包括换行符。