C#Split by String [] Delimiter Match Exact Word Only

时间:2013-03-20 09:46:50

标签: c# regex split

我有字符串,其值应按字符串分隔符分割。例如,我的分隔符是“at”,我想只用精确的“at”关键字分割字符串值。以下是我的示例字符串值

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

如果我使用下面的代码,那么“at”中的单词也会被拆分。

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

我想要的结果是一个数组,如果合并将是“Metadata quota what batter”。

请帮忙。

4 个答案:

答案 0 :(得分:3)

也许:

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

Demo

如果案件有问题,请用StringComparer.OrdinalIgnoreCase替换!= "at"部分。

答案 1 :(得分: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"|]

答案 2 :(得分:0)

没有任何可靠的解决方案,因为这是非常语言和您的字符串可能的结构特定。

为了使更容易,你可以考虑按" at "at前后空格分割),但这不会解决所有可能出现的问题。

示例:

"I was loooking at the tree",会失败,因为这里的“at”不是范围,而是真实短语中的 word

答案 3 :(得分:0)

你应该利用周围的空白......

首先,将原始文本包装在一些空格中以应对开头和/或结尾处的“at”:

sampleStr = " " + sampleStr + " ";

然后你这样分开:

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

然后你得到你想要的结果。