[英]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
將匹配字母數字到非字母數字的邊界(反之亦然)。 在這種情況下,這可以確保您將james
或jame
視為整個單詞而不是部分單詞。
根據您的問題,這是您將要使用的。
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.