先給一個例子吧。
有下列字符串:
“reservation,rental,type”
我想用根據,號,將該字符串轉換成數組。不用說,有一個最簡單的方法,用 string.Split(new char[]{‘,’})可以輕松辦到。
1 string[] strs = string.Split(new char[]{','};
2 foreach (string str in strs)
3 {
4 //...
5 }
但是,假設某一個數據中本身就包含了,號呢?例如:
“reser,vation,rental,type”
假設reser,vation本身是一個完整的數據,這下如果再用上面的方法就會出大問題了 。如果能夠用\,之類的標記,將該,號保留在數據中,而不是用作分隔字符串的標記就好 了。
所以,思考了一下,試著用正則表達式來解決這個問題。先將代碼粘貼在這裡,不知 道是否有更好的方法。
1 var spliters = Regex.Split(values, @"([^\\],)");
1 for (int i = 0; i < spliters.Length; ++i)
2 {
3 if (i % 2 == 1)
4 {
5 spliters[i - 1] += spliters[i].Substring(0, 1);
6 spliters[i] = spliters[i].Substring (1);
7 }
8
9 }
1 假設我用上面的正則表達式來分析一下數據。
1 “reser\,vation,rental,type”
1 會得到一下結果
1 reser\,vati
1
1 rental
1 ,
1 type
1 你會發現,第一個n和,號被作為分隔符捕獲 。這顯然不是我所需要的,所以又用了下面的for循環對該數據進行修正。
1 for (int i = 0; i < spliters.Length; ++i)
2 {
3 if (i % 2 == 1)
4 {
5 spliters[i - 1] += spliters[i].Substring(0, 1);
6 spliters[i] = spliters[i].Substring (1);
7 }
8
9 }
修正後的結果是
reser\,vation
,
rental
,
type
不知道大家是否有更好的想法。先謝謝了。