2013-05-30 74 views
0

我需要如下拆分C#中的字符串被格式化:什麼是在C#中分割此字符串的好方法?

「(11)123456(14)ABC123(18)gt567」

隨着所希望的結果是一個字符串數組,如:

  • 「(11)123456」
  • 「(14)ABC123」
  • 「(18)gt567」

我猜測可能會涉及一個正則表達式,但這是我的弱點之一。

+0

什麼標準決定了字符串應該在哪拆分?一個左括號? –

+0

爲什麼不使用'('進行拆分? – MoCapitan

+1

var parts = text.Split('(')。Select(p =>「(」+ p).ToArray() –

回答

6
var result = "(11)123456(14)abc123(18)gt567" 
      .Split(new string[]{"("}, StringSplitOptions.RemoveEmptyEntries) 
      .Select(i => "(" + i).ToList(); 
+2

聰明的答案比RegEx替代方案的表現要好得多 – evanmcdonnal

+1

這對我很有幫助解決方案@Schlomo也很有效,但是因爲我使用Linq並且這個解決方案返回一個列表, (我喜歡StackOverflow) –

+0

作爲一個旁註,我做了一些細微的改變,以消除作爲列表中第一個元素返回的多餘「(」,如下所示:var result =(11)123456(14)abc123(18)gt567「.Split('(')。Where(i => i!=」「).Select(i =>」(「+ i).ToList() –

1

喜歡的東西:

string theString = "(11)123456(14)abc123(18)gt567"; 

Regex reSplit = new Regex(@"\(\d+\)[^\(]+"); 
var matches = reSplit.Matches(theString); 

這會給你Match對象,然後可以檢查的集合。

爲了得到一個字符串數組:

var splits = matches.Cast<Match>().Select(m => m.Value).ToArray(); 
+0

不要忘記他有一些alpha在第二個和第三個匹配中的字符 – jbabey

8
var s = "(11)123456(14)abc123(18)gt567"; 

Regex r = new Regex(@"\(\d+\)\w+"); 

var matches = r.Matches(s); 

string[] array = new string[matches.Count]; 
for(int i = 0; i < matches.Count; i++) 
    array[i] = matches[i].Captures[0].Value; 
0

您可以使用正則表達式與它一起Split method得到部分的陣列。

var s = "(11)123456(14)abc123(18)gt567"; 
var pattern = new Regex(@"(\([^\(]+)"); 
var components = pattern.Split(s) 

該模式匹配左括號,後跟任意數量的字符,直到下一個左括號。

如果您需要處理空白如新行,您可能需要稍微調整or the RegexOptions模式。