C# - 在文本之间取一个字符串

C# -Take a string between a text

我在列表中有各种字符串:

Ord.cl. N. 2724 del 08/11/2019

也可以是

Ord.cl. N. 2725/web del 08/11/2019

我必须把 'N.' 之后和 'del' 之前的所有内容都拿走。结果我想要

有人可以用 C# 编写代码吗?我知道有子字符串,但也许有更好的方法?

使用正则表达式,你可以这样做:

var m = Regex.Match("Ord.cl. N. 2724 del 08/11/2019", @"(?<=N\.).*?(?=del)");
if (m.Success)
{
    var result = m.Value;
}

正则表达式解释:

  • (?<=N\.) 查找前面的 "N.".

  • .*? 匹配任何字符序列,但尽可能少

  • (?=del) 期待追踪 "del".

如果它总是那么可预测(space 前后 N. 和 space 前后 del),那么它相当简单。使用 Substring and use IndexOf 查找出现的 N.del:

var theString = "Ord.cl. N. 2725/web del 08/11/2019";

var start = theString.IndexOf("N. ") + 3;
var length = theString.IndexOf(" del", start) - start;

var partIWant = theString.Substring(start, length).Trim();

Console.WriteLine(partIWant);

这还假设 N.del 在您的字符串中只会出现一次。

你可以像这样构建一些扩展方法

    public string SubstringFromTo(this string input, int from, int to)
    {
        return input.Substring(from, (to - from));
    }
    public string SubstringFromTo(this string input, string from, string to)
    {
        var index1 = input.IndexOf(from) != -1 ? input.IndexOf(from) : 0;
        var index2 = input.IndexOf(to) != -1 ? input.IndexOf(to) : (input.Length - 1);
        return input.SubstringFromTo(index1, index2);
    }

    var asd = " ciao ** come stai ? asdasd".SubstringFromTo("**","?");

结果 = "come stai"
//.Trim() 如果你想要

        for (int i = 0; i< list.Count-1; i++)
        {
           NDocList.Add(list[i].DocumentiOrigine.Split(new string[] { " N. " }, StringSplitOptions.None)[1]
            .Split()[0]
                .Trim());
        }

以某种方式解决了这个问题。