2013-06-12 146 views
1

需要的行爲存在問題。正則表達式:按分隔符分割字符串,然後按另一個分割字符串

假設有一個

sourceString = @"name1$$value1^name2$$value2^name3$$value3"; 

也許更多一長串......

我想先通過^分離分割,然後由另一$$基於此命名值來創建字典對。

此字符串存儲在文件中,因此可能太長,任何拆分操作可能會花費太多時間。 我希望有一個正則表達式匹配^和內部羣匹配$$

回答

3

這個正則表達式(.*?)\$\$(.*?)(?:\^|$)將匹配名稱值對,這裏是一個Rubular to prove it。並使用它,你可以使用下面的代碼:

var input = "name1$$value1^name2$$value2^name3$$value3"; 
var pattern = @"(.*?)\$\$(.*?)(?:\^|$)"; 
var hash = new Dictionary<string, string>(); 
var match = Regex.Match(input, pattern); 

while (match.Success) 
{ 
    hash.Add(match.Groups[1].Value, match.Groups[2].Value); 
    match = match.NextMatch(); 
} 
+0

我想這是做同樣的@「((? 。*?))\ $ \ $(?(。*?))(?:\^| $) –

+0

@ Lonli-Lokli,是的,這是正確的你看過Rubular嗎? –

+0

是的,我剛剛修改了LINQPad的變體,Thx爲你的版本! –

0

爲什麼不使用:

sourceString.Split(new char[] {'^'}, StringSplitOptions.RemoveEmptyEntries) 

然後你就可以使用$$

+0

正如我前面提到的那樣,這將是一項耗時的操作。 –

+0

你確定一個簡單的拆分比正則表達式更費時嗎? – okrumnow

+0

現在我正在做檢查^)但要檢查我需要一個正確的正則表達式第一。 Ps無論如何,我敢肯定... –