簡體   English   中英

在C#中搜索一些字符串

[英]searching some string in c#

如何在C#中搜索一些字符串? 好吧,如果我有字符串“ James Bond”並且正在搜索“ James”或“ james”,它將返回true,但是如果我正在搜索“ jame”,它將返回false。 我該怎么做? 也許我不需要具體說明。 我需要根據以''分隔的單詞進行搜索。 如果我正在搜索jame,它將返回false。 如果我在搜索jam時使用contains,它也會返回true嗎?

您必須為此使用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視為整個單詞而不是部分單詞。

根據您的問題,這是您將要使用的。

    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

您可以使用“ Split將字符串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

使用正則表達式。 有關示例,請參見:

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

當在字符串內的任何地方都找到“ cow”時,這是匹配的。 在您的情況下,它將是“ Jame”。

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

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

您可以使用單詞邊界使用正則表達式來實現。 以下代碼將向您展示如何使用不區分大小寫的搜索進行匹配,並且不會對“ 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”與“ James Bond”中的“ James”匹配),但是foundNameNotExpected將為false(因為我們不希望“ jame”與“ James”匹配)。

試試看

方法: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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM