我有字符串,其值应按字符串分隔符分割。例如,我的分隔符是“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”。
请帮忙。
答案 0 :(得分:3)
也许:
IEnumerable<string> wordsWithoutAt = sampleStr.Split()
.Where(w => !StringComparer.OrdinalIgnoreCase.Equals(w, "at"));
string result = string.Join(" " , wordsWithoutAt);
如果案件有问题,请用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);
然后你得到你想要的结果。