我有一堆如下所示的字符串,
var myString = "ABC.XYZ.GrabIt.Delimator.Hello1.Hello2";
//var myString = "ABC.XYZ.PQR.GrabIt.Delimator.Hello1.Hello2.Hello3";
//var myString = "ABC.GrabIt.Delimator.Hello1";
在这里,我需要在字符串.Delimator
之前和子句点之后的子字符串,我只需要输出为GrabIt
。
我在下面做了尝试,在这里我将字符串与值Delimator
分开,然后尝试在最后2个点之间抓取字符串。寻找一种优雅的方法来做到这一点?谢谢
var referrer = myString.Split(new[] { "Delimator" }, StringSplitOptions.None)[0];
referrer = referrer.Substring(referrer.Substring(0, referrer.LastIndexOf(".")).LastIndexOf(".") + 1).TrimEnd('.');
答案 0 :(得分:7)
完全适合正则表达式。
@"(?<=\.)[^\.]+(?=\.Delimator)"
换句话说:寻找除点[^\.]+
之外的非空字符序列,其后是点(?<=\.)
和定界符(?=\.Delimator)
。
var match = Regex.Match(myString, @"(?<=\.)[^\.]+(?=\.Delimator)");
if (match.Success)
Console.WriteLine(match.Value);
答案 1 :(得分:1)
只要它易于理解和可维护,就不要害怕代码。
会有正则表达式解决方案,但这可能会更快并且易于阅读。
var split = myString.Split('.');
var index = Array.IndexOf(split, "Delimator");
Console.WriteLine(split[index - 1]);
显然没有错误检查