如何在原始字符串中找到捕获的子字符串的最后一个字符

本文关键字:字符串 字符 最后一个 原始 | 更新日期: 2023-09-27 18:20:41

伙计们,这是我的原始字符串,010000111'

我需要找到这个模式"10000111"。所以我用下面的正则表达式来做。

Match m=Regex.Match("010000111",@"[1][0][0][0][1]+");

我从这个Regex中得到了正确的答案。但问题是我需要得到原始字符串中捕获字符串的最后一个字符的位置,这意味着根据我的例子,我捕获的模式是"10000111"根据捕获的模式,我的最后一个索引是7,但与原始字符串相比,它是8。

我使用了lastIndexOf('1')函数。但它给出了捕获字符串的索引。

你能帮我解决这个问题吗?

如何在原始字符串中找到捕获的子字符串的最后一个字符

您不需要regex就可以做到这一点。

要检查字符串是否包含其他字符串,请使用someString.IndexOf("someOtherString")方法。这将为您提供序列中第一个字符的索引。

要获得最后一个字符的位置,您所要做的就是将测试字符串的长度相加并减去1:

var firstString = "010000111";
var secondString = "10000111";
var positionOfSecondOverFirst = firstString.IndexOf(secondString); // 1
var firstContainsSecond = (positionOfSecondOverFirst >= 0); // true
var positionOfLastChar = positionOfSecondOverFirst + secondString.Length - 1; // 8

参考:https://msdn.microsoft.com/library/k8b1470s(v=vs.110).aspx

您想要使用正则表达式的特殊原因是什么?我认为你想要完成的事情可以通过简单地使用IndexOf 来完成

public static int GetIndex()
{
    const string input = "010000111";
    const string substring = "10000111";
    var startIndex = input.IndexOf(substring);
    if (startIndex != -1)
    {
        return startIndex + substring.Length;
    }
    return -1;
}

您可以使用以下方法:

private int findLastIndex(string s1, string s2)
{
  if (s1.indexOf(s2)>-1)
  {
    return s1.indexOf(s2) + s2.Length - 1;
  }
  else
    return -1; //not found
}