我有一个字符串,其中有两个标记,这些标记绑定了要提取的子字符串,但是该子字符串可能包含标记本身,因此我希望在第一次出现标记A和最后一次出现标记B之间。需要在不区分大小写的搜索中搜索令牌。
试图用正则表达式来解决这个问题,但似乎无法弄清楚。不确定此处的最佳方法。 String.split将不起作用。
我无法修改字符串中标记之间的数据大小写。
答案 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);
从我个人的角度来看,正则表达式在这里可能有点过大,请尝试以下示例:)