2012-11-21 36 views
0
"key1"="value1 http://www.example.com?a=1";"key2"="value2 http://www.example.com?a=2"; 

我需要分割上面的第2行,第一次是逗號字符;第二次在=號上。分裂;然後on =,有問題使用String.Split,所需的正則表達式

它不能正常工作,因爲值部分也有=符號。

我的代碼不起作用,因爲它假定值部分不''有一個=符號,它不使用正則表達式String.Split('=')。

有人可以幫助正則表達式所需的,我加雙引號圍繞這兩個鍵/值來幫助保持單獨的東西。

+0

當你說「逗號」,我想你的意思是「分號」。 – Jodrell

+0

''我在兩個鍵/值周圍加了雙引號,以幫助保持分離「'所以雙引號通常不在那裏? –

+0

http://regexpal.com/嘗試使用這個工具與您的上述值。然後你可以玩正則表達式,直到它給你所需的值。 – user1836293

回答

2

使用String.Split(char[], int)過載(http://msdn.microsoft.com/en-us/library/c1bs0eda.aspx)。第二個參數將限制返回的子字符串的數量。如果您知道您的字符串始終至少有1個等號(鍵/值對),則將第二個參數設置爲2。

string x = "key1=value1 http://www.example.com?a=1;key2=value2 http://www.example.com?a=2;"; 
char[] equal = new char[1] { '=' }; 
char[] semi = new char[1] { ';' }; 
string[] list = x.Split(semi, StringSplitOptions.RemoveEmptyEntries); 
foreach (string s in list) 
{ 
    string[] kvp = s.Split(equal, 2); 
    Console.WriteLine("Key: {0}, Value: {1}", kvp[0], kvp[1]); 
} 

- 結果:

Key: key1, Value: value1 http://www.example.com?a=1 
Key: key2, Value: value2 http://www.example.com?a=2 
+0

爲什麼2,第一個=符號是重要的不是,第二個是在url中,應該忽略。沒有? – loyalflow

+0

@ user1361315 - 因爲count參數是要返回的最大子字符串數。關鍵是子串1,第一個等號的左邊的所有東西。第一個等號右邊的所有內容都是子字符串2. –

2

我沒有使用正則表達式,但你可以做類似如下的事情:

 string test [email protected]"""key1""=""value1 http://www.example.com?a=1"";""key2""=""value2 http://www.example.com?a=2"""; 

     string[] arr = test.Split(';'); 

     foreach (string s in arr) 
     { 
      int index = s.IndexOf('='); 
      string key = s.Substring(0, index); 

      string value = s.Substring(index+1, s.Length - index); 
     } 
+0

'String.Split(char [],int)'重載爲你做了所有的'IndexOf/Substring'的東西。 –

0

你的正則表達式應該看起來像這樣。

"(.+?)"="(.+?)" 

可悲的是我不知道C#,但這應該在每一種語言。爲了獲得成功,你必須選擇每場比賽:

group(1) as keys 
group(2) as values 
0

使用String.SplitStringSplitOptions.RemoveEmptyEntries和字符串與分隔符

string s = "\"key1\"=\"value1 http://www.example.com?a=1\";\"key2\"=\"value2 http://www.example.com?a=2\""; 

string[] result = s.Split(new string[] { "\";\"", "\"=\"", "\"" }, 
          StringSplitOptions.RemoveEmptyEntries); 

result = {string[4]} 
    [0]: "key1" 
    [1]: "value1 http://www.example.com?a=1" 
    [2]: "key2" 
    [3]: "value2 http://www.example.com?a=2"

我使用一個數組以下分隔符(包括雙引號):

";"
"="
"

0

您也可以嘗試使用拆分方法與多個令牌 這裏這會給你一個字符串[]是被分裂出去您的令牌基於多個值

,如果你想刪除空的條目也可以做這樣的

string strValue = @"""key1""=""value1 http://www.example.com?a=1"";""key2""=""value2 http://www.example.com?a=2"""; 
string[] strSplit = strValue.Split(new string[] { "\";\"", "\"=\"", "\"" }, StringSplitOptions.RemoveEmptyEntries); 
代碼個

結果

strSplit {string[4]} string[] 
[0] "key1" 
[1] "value1 http://www.example.com?a=1" 
[2] "key2" 
[3] "value2 http://www.example.com?a=2" 
+0

個人來說,Chris Gessler的例子效果很好,它利用了.NET已經內置的功能,特別是如果你不太舒服的使用RegEx – MethodMan

1

你需要匹配不分裂的文本

var keys= Regex.Matches(yourString,"""(.*?)""=.*?(http.*?)"";").Cast<Match>().Select(x=> 
    new 
    { 
     key=x.Groups[1].Value, 
     value=x.Groups[2].Value 
    } 
); 

foreach(key in keys) 
{ 
    key.key;//the key value 
    key.value;//the value 
}