我需要如下拆分C#中的字符串被格式化:什麼是在C#中分割此字符串的好方法?
「(11)123456(14)ABC123(18)gt567」
隨着所希望的結果是一個字符串數組,如:
- 「(11)123456」
- 「(14)ABC123」
- 「(18)gt567」
我猜測可能會涉及一個正則表達式,但這是我的弱點之一。
我需要如下拆分C#中的字符串被格式化:什麼是在C#中分割此字符串的好方法?
「(11)123456(14)ABC123(18)gt567」
隨着所希望的結果是一個字符串數組,如:
我猜測可能會涉及一個正則表達式,但這是我的弱點之一。
var result = "(11)123456(14)abc123(18)gt567"
.Split(new string[]{"("}, StringSplitOptions.RemoveEmptyEntries)
.Select(i => "(" + i).ToList();
聰明的答案比RegEx替代方案的表現要好得多 – evanmcdonnal
這對我很有幫助解決方案@Schlomo也很有效,但是因爲我使用Linq並且這個解決方案返回一個列表, (我喜歡StackOverflow) –
作爲一個旁註,我做了一些細微的改變,以消除作爲列表中第一個元素返回的多餘「(」,如下所示:var result =(11)123456(14)abc123(18)gt567「.Split('(')。Where(i => i!=」「).Select(i =>」(「+ i).ToList() –
喜歡的東西:
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();
不要忘記他有一些alpha在第二個和第三個匹配中的字符 – jbabey
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;
您可以使用正則表達式與它一起Split
method得到部分的陣列。
var s = "(11)123456(14)abc123(18)gt567";
var pattern = new Regex(@"(\([^\(]+)");
var components = pattern.Split(s)
該模式匹配左括號,後跟任意數量的字符,直到下一個左括號。
如果您需要處理空白如新行,您可能需要稍微調整or the RegexOptions模式。
什麼標準決定了字符串應該在哪拆分?一個左括號? –
爲什麼不使用'('進行拆分? – MoCapitan
var parts = text.Split('(')。Select(p =>「(」+ p).ToArray() –