0

C#でいくつかの文字列を検索するにはどうすればよいですか? 文字列「James Bond」があり、「James」または「james」を検索すると true が返されますが、「jame」を検索すると false が返されます。どうすればそれができますか?多分私はほとんど特定する必要はありません。「 」で区切られた単語に基づいて検索する必要があります 上記を参照してください。jam を検索すると、false が返されます。jam を検索するときに contains を使用すると、true も返されますか?

4

7 に答える 7

2

これに使用する必要がありますRegexContains大文字と小文字を区別せず、単語パターン全体と一致しないため、を使用することはできません。代わりにこれを使用してください:

string text = "James bond";

// this will return true  
bool result = Regex.IsMatch(text, "\\bjames\\b", RegexOptions.IgnoreCase);

// this will return false   
bool result = Regex.IsMatch(text, "\\bjame\\b", RegexOptions.IgnoreCase);

Regexフォーマットでは、上記の\bsは英数字と非英数字の境界に一致します(またはその逆)。この場合、これにより、単語の一部ではなく、単語全体が一致jamesするようになります。jame

于 2012-12-09T05:40:40.223 に答える
1

あなたの質問によると、これはあなたが使うものです。

    var ex = "James Bond".ToLower(); //normalize case
    bool contains = ex.Split(' ').Any( x => x == "jame");
   //FALSE because the *word* "jame" is not found in "james bond"

この質問は多くの混乱を引き起こしているため、関連するすべての大文字と小文字を覚えておく必要があります。

var ex = "James Bond";
bool contains = ex.Contains("jame");
// FALSE because "jame" is not found in "James Bond" due to case-sensitivity

var ex = "James Bond".ToLower(); //normalize case
bool contains = ex.Contains("jame");
// TRUE because "jame" is FOUND in "james bond" due to normalized case
于 2012-12-09T06:03:18.070 に答える
1

を使用Splitして、文字列を分割された部分に分けることができます。元:

string[] items = "James Bond".Split(' ');
// items == { "James", "Bond" }

ToLower大文字と小文字の区別を防ぐために使用できます。元:

string lower = "James Bond".ToLower();
// lower == "james bond"

StartsWith文字列が部分文字列で始まるかどうかを判断するために使用できます。元:

bool startsWithJame = "James Bond".StartsWith("Jame");
// startsWithJame == true

それらをすべて一緒に使用する:

bool anyWordStartsWith_jame_NoCaseSensitivity =
   "James Bond"
   .ToLower()
   .Split(' ')
   .Any(str => str.StartsWith("jame"));
// anyWordStartsWith_jame_NoCaseSensitivity == true
于 2012-12-09T06:11:56.447 に答える
0

単語の境界を使用した正規表現でそれを行うことができます。次のコードは、大文字と小文字を区別しない検索を使用して照合し、「jame」などの誤検知を起こさないようにする方法を示しています。特定の文字列のどこでも機能します。

    static void Main(string[] args)
    {
        string name_to_match = "James Bond";
        string word_to_find = "james";
        string word_to_not_find = "jame";

        string patternToFind = string.Format(@"\b{0}\b", word_to_find);
        string patternToNotFind = string.Format(@"\b{0}\b", word_to_not_find);

        Regex regexToFind = new Regex(patternToFind, RegexOptions.IgnoreCase);
        Regex regexToNotFind = new Regex(patternToNotFind, RegexOptions.IgnoreCase);

        bool foundNameExpected = regexToFind.IsMatch(name_to_match);
        bool foundNameNotExpected = regexToNotFind.IsMatch(name_to_match);
    }

この場合、ブール値のfoundNameExpectedはtrueになりますが(「james」は「JamesBond」の「James」と一致すると予想されるため)、foundNameNotExpectedはfalseになります(「jame」を「James」と一致させたくないため)。

于 2012-12-09T05:40:09.537 に答える
0

正規表現を使用します。例については、次を参照してください。

http://msdn.microsoft.com/en-us/library/ms228595%28v=vs.80%29.aspx

これは、文字列内のどこかに "cow" が見つかった場合に一致します。あなたの場合、それは「ジャム」になります。

于 2012-12-09T05:30:00.670 に答える
0

メソッドを使用Containsして検索できます。

string[] names = new string[] { "joe", "bob", "chris" };
if(names.Contains("james")){
    //code
}
于 2012-12-09T05:34:05.453 に答える
-3

これを試してみてください。

方法:1

string s1 = "The quick brown fox jumps over the lazy dog";
string s2 = "fox";
bool b;
bool c;
b = s1.Contains(s2);
c = s1.Contains("test")

bool b は true を返します。
bool c は false を返します。


方法:2

    string str = "My Name is james";  

 int result = str.IndexOf("james"); 

文中に特定の単語が見つからない場合、result は -1 になります。

于 2012-12-09T05:31:56.243 に答える