2017-07-12 43 views
1

我在使用Visual Basic刪除任意文本中廣泛使用的vbNewLine的問題上存在一個問題。如何在Visual Basic中的RegExp中使用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」 尚未幫我...

回答

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更換所有非重疊實例。

圖案的詳細資料

  • (\r?\n) - 捕獲組1匹配的可選VBCR然後vbLf
  • (?:\r?\n){2,} - 在組1
  • 使用的模式的2個或更多個序列

$1是反向在組1中捕獲的換行符。

如果要硬編碼換行符,請在替換中使用vbCrLf & vbCrLf。或者您需要的任何其他換行符。

+1

令人難以置信的快awnser。奇蹟般有效。謝謝分配! – Killgnom