我在使用 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,}" 时,我可以替换任意数量的 a >= 2,这正是我想要的,但对于 vbNewLines。但是上面的代码不起作用。有关如何进行的任何建议?使用 "\r\n" 还没有帮助我......
使用以下表达式:
(\r?\n)(?:\r?\n){2,}
并替换为$1$1
. 请参阅正则表达式演示。
在代码中:
objRegExp.Pattern = "(\r?\n)(?:\r?\n){2,}"
objRegExp.Global = True
然后
Dim result : result = objRegExp.Replace(testText, "$1$1")
本Global
应该是真正的替换所有非重叠的实例。
图案详情:
(\r?\n)
- 捕获匹配可选vbCr和vbLf 的组 1(?:\r?\n){2,}
- 组 1 中使用的模式的 2 个或更多序列。这$1
是对第 1 组中捕获的换行符的反向引用。
如果要硬编码换行符,请vbCrLf & vbCrLf
在替换中使用。或您需要的任何其他换行符样式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句