不包括两个字符串的子字符串 c# 返回错误

Ric*_*ati 0 c# string

我正在尝试提取字符串的一部分,我使用了两种模式,我感兴趣的字符串位于这两种模式的中间......但是我收到了这个错误......我在哪里失败了?

[System.ArgumentOutOfRangeException:索引和长度必须引用字符串中的某个位置。参数名称:length] at System.String.Substring(Int32 startIndex, Int32 length) at Program.Main() :line 16

这是代码

using System;
using System.Text.RegularExpressions;

public class Program
{
    public static void Main()
    {
        string pattern = @"<Code>";
        string _pattern = @"</Code>";
        Regex regex = new Regex(pattern);
        Regex _regex = new Regex(_pattern);
        string str = "<?xml version=\"1.0\" encoding=\"UTF-16\" ?><Codici QuoteParams><Code>AC-ALTRE-SPESE-T</Code></Codici QuoteParams>";

        var matches = regex.Matches(str);
        var _matches = _regex.Matches(str);
        string firstString = str.Substring(0+str.IndexOf(matches[0].ToString()),str.IndexOf(_matches[0].ToString()));
        Console.WriteLine(firstString);

    }
}
Run Code Online (Sandbox Code Playgroud)

ger*_*rmi 5

String.Substring 不取开始和结束索引,而是取开始索引和长度。

因此,通常的方法是获取起始索引,然后像这样计算长度:

var start = myString.IndexOf(firstPart);
var end = myString.IndexOf(lastPart);
var length = end - start;
var substring = myString.Substring(start, length);
Run Code Online (Sandbox Code Playgroud)

对于这种特定情况,我建议您在 C# 中使用通常的 XML 功能,XDocument这比为此使用正则表达式更健壮。