【问题标题】:C# - Searching stringsC# - 搜索字符串
【发布时间】:2012-04-13 12:03:43
【问题描述】:

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

例子:

“丢失还是被盗?丢失”

“丢失还是被盗?被盗”

我需要能够阅读此内容,但当我阅读 string.IndexOf(@"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";
 }

【问题讨论】:

  • 总是有一个问号?分开。
  • I've been using the string.IndexOf function through the rest of the form and it works quite well我们这里说的是什么形式?

标签: c# string search full-text-search


【解决方案1】:

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

bool lost = my_string.EndsWith("Lost");

【讨论】:

    【解决方案2】:

    在这种情况下,您可以在子字符串上使用 index of,因为知道它总是会先说丢失或被盗

    所以你解析出丢失或被盗,然后为你的关键字匹配剩余的字符串。

    类似:

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

    【讨论】:

      【解决方案3】:

      如果我理解您的要求,您正在寻找LostStolen 的实例,位于? 之后:

      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;
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          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;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-10
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多