2012-11-16 122 views
3

我可以根據2個空格的字符串分割爲兩個:正則表達式.NET分裂

string Line = "1 2"; 

Regex.Split(Line, " "); 

=> 1,2

我想添加一個例外。如本例所示,'不包含[]'時才分割。

string Line = "1 2 [1 2]"; 

Regex.Split(Line, " "); 

=> 1,2,[1 2]

能否相當容易地通過正則表達式實現這一目標?順便說一下,我使用.NET。

+3

它只是數字/數字嗎?或者它會是其他的東西,比如'1 2 hello [你好嗎?]? –

+0

直覺告訴我,這是一個超出正則表達式範圍的問題 –

+0

你會嵌套嗎? '1 2 [1 2 [1 2]] 3 4'這會產生什麼? –

回答

2

你可以使用一個前瞻,斷言有下一個開放[或字符串結束前沒有關閉]

Regex.Split(Line, @"[ ]+(?![^\[\]]*\])"); 

,如果你有嵌套[...]結構,雖然這會令你失望。請注意,前瞻不是實際匹配的一部分,它只是檢查後面的內容而不消耗任何東西。在lookahead裏面,我使用了[^\[\]]這是一個否定的字符類,匹配任何字符,除了任何一種方括號。

另請注意,這會在一個或多個空格上分開。如果您想要求至少兩個,請將[ ]+替換爲[ ]{2,},如果您想要兩個[ ]{2}

Further reading on lookarounds.

+0

它似乎不起作用。這個正則表達式如何查找其他模式(<>而不是[])? – cs0815

+0

@csetzkorn它適合我。對於輸入'1 2 <1 2>',使用'@「(?![^ \ <\>] * \>)」'。如果這不起作用,請讓我知道究竟發生了什麼,並且如果可能的話顯示一些代碼。 –

+0

只適用於'@「'和'(...' – garyh