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");