如何在C#中搜索某些字符串?好吧,如果我有字符串“詹姆斯邦德”,我正在搜索“詹姆斯”或“詹姆斯”,它将返回true,但如果我正在搜索“jame”,它将返回false。我怎么能这样做? 也许我需要一点具体。我需要根据“看到上面”分开的单词进行搜索。如果我正在寻找jame,它将返回false。如果我在搜索jame时使用contains,它也会返回true吗?
答案 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
将匹配字母数字到非字母数字边界(反之亦然)。在这种情况下,这可以确保您将james
或jame
作为整个单词而不是部分单词进行匹配。
答案 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。