C#-搜索字符串

C#-搜索字符串,c#,string,search,full-text-search,C#,String,Search,Full Text Search,我似乎找不到解决这个问题的好办法。我收到一份关于丢失或被盗设备的报告,从中输入了一系列字符串。在表单的其余部分,我一直在使用string.IndexOf函数,它工作得很好。此问题与说明设备是否丢失或被盗的字段有关 例如: “丢了还是被偷了?丢了” “丢了还是被偷了?被偷了” 我需要能够阅读此内容,但当我阅读string.IndexOf(@“Lost”)时,它将始终返回Lost,因为它在问题中 不幸的是,我无法以任何方式更改表单本身,而且由于表单提交的性质,我不能只编写代码,将字符串的前15个左右

我似乎找不到解决这个问题的好办法。我收到一份关于丢失或被盗设备的报告,从中输入了一系列字符串。在表单的其余部分,我一直在使用
string.IndexOf
函数,它工作得很好。此问题与说明设备是否丢失或被盗的字段有关

例如:

“丢了还是被偷了?丢了”

“丢了还是被偷了?被偷了”

我需要能够阅读此内容,但当我阅读
string.IndexOf(@“Lost”)
时,它将始终返回Lost,因为它在问题中

不幸的是,我无法以任何方式更改表单本身,而且由于表单提交的性质,我不能只编写代码,将字符串的前15个左右字符去掉,因为在某些情况下,这可能太少了

我真的希望C#中的某些东西允许我在找到第一个结果后继续搜索字符串,这样逻辑看起来像:

 string my_string = "Lost or Stolen? Stolen";

 searchFor(@"Stolen" in my_string)
 {
      Found Stolen;
      Does it have "or " infront of it? yes;
      ignore and keep searching;
      Found Stolen again;
      return "Equipment stolen";
 }

这里有几个选择。您可以查找空间的最后一个索引并获取字符串的其余部分:

string input = "Lost or Stolen? Stolen";
int lastSpaceIndex = input.LastIndexOf(' ');
string result = input.Substring(lastSpaceIndex + 1);
Console.WriteLine(result);
或者你可以把它分开,然后说出最后一句话:

string input = "Lost or Stolen? Lost";
string result = input.Split(' ').Last();
Console.WriteLine(result);
Regex也是一种选择,但考虑到上面更简单的解决方案,它有点过头了。适合此场景的快捷方式是使用
RegexOptions.RightToLeft
选项从右侧开始获取第一个匹配:

string result = Regex.Match(input, @"\w+", RegexOptions.RightToLeft).Value;

您可以查找字符串“Lost”,如果它出现两次,则可以确认它是“Lost”

如果我了解您的要求,您正在查找
丢失
被盗
的实例,在
之后:

var q = myString.IndexOf("?");
var lost = q >= 0 && myString.IndexOf("Lost", q) > 0;
var stolen = q >= 0 && myString.IndexOf("Stolen", q) > 0;

// or
var lost = myString.LastIndexOf("Lost") > myString.IndexOf("?");
var stolen = myString.LastIndexOf("Stolen") > myString.IndexOf("?");

// don't forget
var neither = !lost && !stolen;

在这种情况下,您可能会在子字符串上使用索引of,因为知道它总是先说lost或sleet

因此,您解析出丢失或被盗的字符串,然后使用like for you关键字匹配剩余的字符串

比如:

int questionIndex = inputValue.indexOf("?");
string toMatch = inputValue.Substring(questionIndex);
if(toMatch == "Lost")

如果它适用于您的用例,那么使用
.EndsWith()
可能会更容易


总是有一个问号?被它分开。
我一直在表单的其余部分使用string.IndexOf函数,它工作得很好
我们在这里讨论的是什么样的表单?
bool lost = my_string.EndsWith("Lost");