获取第一次出现的“ A”和最后一次出现的“ B”之间的子字符串

时间:2019-05-16 04:55:01

标签: c#

我有一个字符串,其中有两个标记,这些标记绑定了要提取的子字符串,但是该子字符串可能包含标记本身,因此我希望在第一次出现标记A和最后一次出现标记B之间。需要在不区分大小写的搜索中搜索令牌。

试图用正则表达式来解决这个问题,但似乎无法弄清楚。不确定此处的最佳方法。 String.split将不起作用。

我无法修改字符串中标记之间的数据大小写。

2 个答案:

答案 0 :(得分:6)

尝试一下,(我已将其作为扩展方法)

public static string Between(this string value, string a, string b)
{
    int posA = value.IndexOf(a);
    int posB = value.LastIndexOf(b);
    if (posA == -1) || (posB == -1)
    {
        return "";
    }

    int adjustedPosA = posA + a.Length;
    return (adjustedPosA >= posB) ? "" : value.Substring(adjustedPosA, posB - adjustedPosA);        
}

用法是:

var myString = "hereIsAToken_andThisIsWhatIwant_andSomeOtherToken";
var whatINeed = myString.Between("hereIsAToken_", "_andSomeOtherToken");

答案 1 :(得分:0)

解决此问题的一种简单方法是使用字符串类提供的indexOf函数。 IndexOf返回第一次出现,顾名思义,lastIndexOf,最后一次出现。

string data;
string token1;
string token2;

int start = data.IndexOf(token1)+token1.Length;
int end = data.LastIndexOf(token2);

string result = data.Substring(start, end-start);

从我个人的角度来看,正则表达式在这里可能有点过大,请尝试以下示例:)