2013-10-30 73 views
1

我有以下字符串值:VB.Net - 使用正則表達式來標識雙引號之間的新線路

1A-2A-3A-"Comment line 1 
Comment line 2 
Comment line A1 
Comment line A2"-BREAK1 
1B-2B-3B-"Comment line 3 
Comment line 4"-BREAK2 
1C-2C-3C-4C-BREAK3 
1D-2D-3D-4D-BREAK4 

我想用在vb.net,給我結果如下正則表達式:

1A-2A-3A-"Comment line 1|Comment line 2|Comment line A1|Comment line A2"-BREAK1 
1B-2B-3B-"Comment line 3|Comment line 4"-BREAK2 
1C-2C-3C-4C-BREAK3 
1D-2D-3D-4D-BREAK4 

基本上規則是刪除雙引號之間的任何新行。

任何幫助將受到歡迎!

+0

正則表達式(以及任何其他類型的「小長度代碼」方法)的基本要求是獲得一個清晰的模式。你輸入的模式是什麼?在包含單詞「line」的行之後刪除新行?你也可以請張貼你已經嘗試過的? – varocarbas

+0

此外,您的輸入不響應任何VB.NET接受的格式。我們是否應該明白在第一個代碼塊的每一行之後有一個Environment.NewLine? – varocarbas

+0

@varocarbas在雙引號之間找到文本時,該模式將刪除換行符 – MiBol

回答

0

我想出了一個解決方案:

Dim vInput = <xml>1A-2A-3A-"Comment line 1 
Comment line 2 
Comment line A1 
Comment line A2"-BREAK1 
1B-2B-3B-"Comment line 3 
Comment line 4"-BREAK2 
1C-2C-3C-4C-BREAK3 
1D-2D-3D-4D-BREAK4</xml>.Value 

Dim vRegExMatch = System.Text.RegularExpressions.Regex.Matches(vInput, """[^""\\]*(?:\\.[^""\\]*)*""|'[^'\\]*(?:\\.[^'\\]*)*'") 
Dim vSpecialChar As Char = "|" '"†" 

For Each vMatch In vRegExMatch 
    vInput = vInput.Replace(CStr(vMatch.Value), CStr(vMatch.Value).Replace(vbLf, vSpecialChar)) 
Next 

結果:

1A-2A-3A-"Comment line 1|Comment line 2|Comment line A1|Comment line A2"-BREAK1 
1B-2B-3B-"Comment line 3|Comment line 4"-BREAK2 
1C-2C-3C-4C-BREAK3 
1D-2D-3D-4D-BREAK4 

希望幫助給別人!

相關問題