寻找获得子字符串的优雅方法

时间:2018-12-24 06:29:57

标签: c#

我有一堆如下所示的字符串,

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('.');

2 个答案:

答案 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]);

显然没有错误检查