在c#中搜索一些字符串

时间:2012-12-09 05:25:31

标签: c#

如何在C#中搜索某些字符串?好吧,如果我有字符串“詹姆斯邦德”,我正在搜索“詹姆斯”或“詹姆斯”,它将返回true,但如果我正在搜索“jame”,它将返回false。我怎么能这样做? 也许我需要一点具体。我需要根据“看到上面”分开的单词进行搜索。如果我正在寻找jame,它将返回false。如果我在搜索jame时使用contains,它也会返回true吗?

7 个答案:

答案 0 :(得分:2)

您必须使用Regex。您不能使用Contains,因为它不会考虑不区分大小写并匹配整个单词模式。请改用:

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格式中,上述\b将匹配字母数字到非字母数字边界(反之亦然)。在这种情况下,这可以确保您将jamesjame作为整个单词而不是部分单词进行匹配。

答案 1 :(得分: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

答案 2 :(得分: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

答案 3 :(得分:0)

使用正则表达式。有关示例,请参阅:

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

匹配时,在字符串内的任何位置找到“cow”。在你的情况下,它将是“Jame”。

答案 4 :(得分:0)

您可以使用Contains方法进行搜索:

string[] names = new string[] { "joe", "bob", "chris" };
if(names.Contains("james")){
    //code
}

答案 5 :(得分: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);
    }

在这种情况下,boolean foundNameExpected将为true(因为我们希望“james”匹配“James Bond”中的“James”),但是findNameNotExpected将是false(因为我们不希望“jame”匹配“James” “)。

答案 6 :(得分:-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"); 
如果在句子中找不到特定单词,

结果将为-1。