【问题标题】:How do I exactly match a word with C#'s contains function?如何将单词与 C# 的 contains 函数完全匹配?
【发布时间】:2014-11-18 18:12:50
【问题描述】:

我正在尝试通过 C# 读取脚本并确定它们是否包含某些单词,但这些单词应该相同,而不是只包含我要查找的内容。有没有办法使用contains-function,挑出单词,并检查它是否与确切的单词相同?

我如何确定它是否同时包含与搜索词相同

目前我正在使用以下脚本:

// GetScriptAssetsOfType<MonoBehaviour>() Returns all monobehaviour scripts as text
foreach (MonoScript m in GetScriptAssetsOfType<MonoBehaviour>())
{
    if (m.text.Contains("Material"))
    {
       // Identical check?
    }
}

【问题讨论】:

  • 如果你不想使用等号运算符,你可以欺骗它说 m.text.Contains("Material") && m.text.Length == 8
  • @Miche 但 m.text 的长度总是比 8 长。因为我试图在一个巨大的文本文档中挑出那个词,也就是一个脚本。

标签: c# contains


【解决方案1】:

正则表达式怎么样?

bool contains = Regex.IsMatch(m.text, @"\bMaterial\b");

【讨论】:

  • 嗯,没有考虑正则表达式。我想我会试试看。
【解决方案2】:

在里面使用另一张支票。希望我能理解您的问题。

// GetScriptAssetsOfType<MonoBehaviour>() Returns all monobehaviour scripts as text
foreach (MonoScript m in GetScriptAssetsOfType<MonoBehaviour>())
{
    if (m.text.Contains("Material"))
    {
        if(m.text == "Material")
        {
             //Do Something
        }
    }
}

【讨论】:

  • 那行不通。 m.text 有时 = 1200 行长。我只想检查被包含过滤的单个单词是否等于
  • 您应该像其他答案所说的那样使用正则表达式。如果您不想使用正则表达式,另一种解决方案是拆分单词,然后循环检查。你不需要包含 tho
【解决方案3】:

包含将搜索您作为参数输入的确切单词 在一个小程序中检查这个作为示例

string a = "This is a test";
string b = "This is a TEST";
Console.WriteLine(a.Contains("test"));
Console.WriteLine(b.Contains("test"));

希望我能很好地理解你的问题

【讨论】:

  • 是的,在您的测试中这可能有效。但是,如果您的脚本包含单词 colorMaterial,它仍然会找到该材质。使它不再精确。
【解决方案4】:

只是使用扩展方法使正则表达式更方便

扩展类

using System.Text;
using System.Text.RegularExpressions;
namespace ConsoleApplication11
        {
            public static class Extension
            {
                public static Match RegexMatch(this string input, string pattern, RegexOptions regexOptions = RegexOptions.IgnoreCase)
                {
                    return Regex.Match(input, pattern, regexOptions);
                }
            }
        }

并使用上述类。

        using System.Text;
        namespace ConsoleApplication11
        {
            class Program
            {
                static void Main(string[] args)
                {
                    bool isMatch = "this is text ".RegexMatch(@"\bis\b").Success;
                }
            }
        }

如果不熟悉,请参阅扩展方法http://www.codeproject.com/Articles/573095/A-Beginners-Tutorial-on-Extension-Methods-Named-Pa

【讨论】:

    【解决方案5】:

    所以你正在寻找一个正则表达式而不是包含,现在我明白你的问题了

    string a = "This is a test for you";
    string b = "This is a testForYou";
    string c = "test This is a for you";
    string d = "for you is this test.";
    string e = "for you is this test, and works?";
    
    var regexp = new Regex(@"(\stest[\s,\.])|(^test[\s,\.])");
    
    
    Console.WriteLine(regexp.Match(a).Success);
    Console.WriteLine(regexp.Match(b).Success);
    Console.WriteLine(regexp.Match(c).Success);
    Console.WriteLine(regexp.Match(d).Success);
    Console.WriteLine(regexp.Match(e).Success);
    

    【讨论】:

    • 我不是正则表达式专家,我很确定你可以改进这一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    相关资源
    最近更新 更多