2013-03-20 144 views
3

我有一個字符串,其值應由字符串分隔符分隔。例如,我的分隔符是「at」,我只想用精確的「at」關鍵字分割字符串值。下面是我的示例字符串值C#按字符串拆分[]分隔符僅匹配確切字

var sampleStr= "at Metadata at quota at what at batter"; 

如果我使用下面的代碼,改爲「在」在其中也分裂。

var result= sampleStr.Split(new string[] { "at" }, StringSplitOptions.None); 

我想要的結果是一個數組,如果組合將是「元數據配額什麼麪糊」。

請幫忙。

+0

「在」'更改您的字符串是'atMetadataatquotaatwhatatbatter'或更改您的分隔符是'包括空間。或者,如果空白不重要,請在分割前調用'Trim()' – DGibbs 2013-03-20 09:48:17

+0

@DGibbs我無法更改它們。我的示例字符串值只是一個示例,但我的實際數據是一個Exception的StackTrace。所以省略空間我認爲不是解決方案。例如在System.Collections.Generic.List'1處有幾行StackTrace System.Data.Common.Internal.Materialization.Shaper'1.SimpleEnumerator.MoveNext()\ r \ n。ctor(IEnumerable'1 collection)\ r \ n at System.Linq.Enumerable.ToList [TSource](IEnumerable'1 source)\ r \ n at – 2013-03-20 09:51:53

+0

如果模式始終爲[[...] \ r \ n at [...]「,難道你不能簡單地分成」\ r \ n at「嗎? – Smallhacker 2013-03-20 10:03:38

回答

1
splitted = Regex.Split(text,@"\bat\s*\b"); 

\ b表示任何字邊界。 \ s *將匹配「at」後的空白字符。

splitted : string [] = [|""; "Metadata "; "quota "; "what "; "batter"|] 

如果不需要一個空的空間然後嘗試像下面...

List<string> splitted = Regex.Split(phrase, @"\bat\s*\b",StringSplitOptions.RemoveEmptyEntries); 

splitted : string [] = [| "Metadata "; "quota "; "what "; "batter"|] 
+0

如果你想讓它忽略大小寫,你可以使用這個重載http://msdn.microsoft.com/en-us/library/byy2946e.aspx並申請RegexOptions.IgnoreCase – 2013-03-20 10:04:12

+0

謝謝你的幫助! – 2013-03-22 02:34:42

0

沒有任何可靠的解決方案,因爲這是非常語言和您的字符串可能的結構特定。

爲了使它更容易可以通過" at "認爲分裂(at在前後空格),但這不會reolve順便說一下所有可能的問題。

例子:

"I was loooking at the tree",將失敗,因爲「在」這裏沒有分隔符,但一個真正的短語內

3

也許:

IEnumerable<string> wordsWithoutAt = sampleStr.Split() 
    .Where(w => !StringComparer.OrdinalIgnoreCase.Equals(w, "at")); 
string result = string.Join(" " , wordsWithoutAt); 

Demo

如果案件事項更換StringComparer.OrdinalIgnoreCase部分與!= "at"

0

你應該充分利用周圍的空白....

首先,包裝在一些空白的原始文本,以應付「爲」在開始和/或結束:

sampleStr = " " + sampleStr + " "; 

然後你分裂像這樣:

var result = sampleStr.Split(new string[] { " at " }, StringSplitOptions.RemoveEmptyEntires); 

然後你有你想要的結果。