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