我有一个问题,即使用Visual Basic删除任意文本中广泛使用的vbNewLine。
我最想要的是:当有超过两个vbNewLine之后,除了前两个之外都删除了所有。
例如:
This is some sample text.
It contains a lot of new lines.
Too much in fact.
归结为:
This is some sample text.
It contains a lot of new lines.
Too much in fact.
代码示例:
Dim testText : testText = "This is some sample text." & vbNewLine & vbNewLine & "It contains a lot of new lines." & vbNewLine & vbNewLine & vbNewLine & vbNewLine & "Too much in fact."
Dim objRegExp
Set objRegExp = New RegExp
objRegExp.Pattern = "" & "vbNewLine" & "{2,}"
'objRegExp.Pattern = "" & "vbNewLine" -> Works for single vbNewLine's
'objRegExp.Pattern = "" & "vbNewLine" -> Works for multiple instances of a (aa, aaa, aaaa, etc.)
Dim result : result = objRegExp.Replace(testText, vbNewLine)
然而,我的模式似乎是错误的。如果我使用“”& “vbNewLine”作为模式,我可以替换每一个换行符。当我使用“a {2,}”时,我可以替换任何数量的> = 2,这正是我想要的,但对于vbNewLines。但是上面的代码不起作用。有关如何进行的任何建议?使用“\ r \ n”还没有帮助我...
答案 0 :(得分:1)
使用以下表达式:
(\r?\n)(?:\r?\n){2,}
并替换为$1$1
。请参阅regex demo。
在代码中:
objRegExp.Pattern = "(\r?\n)(?:\r?\n){2,}"
objRegExp.Global = True
然后
Dim result : result = objRegExp.Replace(testText, "$1$1")
Global
应为 True 以替换所有非重叠的实例。
模式详情:
(\r?\n)
- 捕获与可选 vbCr 匹配的第1组,然后使用 vbLf (?:\r?\n){2,}
- 第1组中使用的2个或更多个模式序列。 $1
是对第1组内捕获的换行符的反向引用。
如果您想对换行符进行硬编码,请在替换中使用vbCrLf & vbCrLf
。或者你需要的任何其他换行风格。