C#IndexOf,当单词是另一个单词的一部分时,如何?
假设我有字符串C#IndexOf,当单词是另一个单词的一部分时,如何?,c#,string,C#,String,假设我有字符串“浸泡橡木”,我想有字符串索引(“橡木”),它返回我“橡木”开始于“浸泡”(1)的索引,但我想找到确切单词“橡木”(5)的索引,我需要做什么 string text = "soak oak"; char[] seperators = {' ', '.', ',', '!', '?', ':', ';', '(', ')', '\t', '\r', '\n', '"', '„', '“'}; string[] parts = text.Split(seperators
“浸泡橡木”
,我想有字符串索引(“橡木”
),它返回我“橡木”
开始于“浸泡”
(1)的索引,但我想找到确切单词“橡木”
(5)的索引,我需要做什么
string text = "soak oak";
char[] seperators = {' ', '.', ',', '!', '?', ':',
';', '(', ')', '\t', '\r', '\n', '"', '„', '“'};
string[] parts = text.Split(seperators,
StringSplitOptions.RemoveEmptyEntries);
text.IndexOf("oak"); // gets '1' because "oak" is in "soak"
// but I want to get 5 because of exact word "oak"
正则表达式方法
string text = "soak oak";
int result = Regex.Match(text, @"\boak\b").Index;
我们可以在循环中测试索引(IndexOf
):
您可以使用正则表达式,也可以使用正则表达式定义的单词边界:
string text = "soak oak";
var pattern = @"\boak\b";
var regex = new Regex(pattern);
foreach(Match m in regex.Matches(text)){
Console.WriteLine(m.Index);
Console.WriteLine(m.Value);
}
您可以使用下面的正则表达式来查找字符串中的确切单词
string text = "soak oak";
string searchText = "oak";
var index = Regex.Match(text, @"\b" + Regex.Escape(searchText) + @"\b").Index;
输出:
5
请参见通过将字符串转换为列表并使用IndexOf()方法,可以在数组中找到该字符串
它告诉您它是哪个数组项,而不是原始字符串中的索引。另一种正则表达式方法-
string text = "soak oak";
var match = Regex.Match(text, @"\s[oak]");
if (match.Success)
{
Console.WriteLine(match.Index); // 4
}
- \s空白
希望有帮助。您正在搜索字符串文本
,而不是字符串[]部分
。您已经完成了大部分操作。。。您已使用分隔符将文本拆分为多个部分。现在,您只需要检查这些部分中是否有任何部分是“橡木”,您需要为其实现一个算法。将所有字符放入数组,第2步。检查数组的第一个字母或空格以要查找的关键字开头后的字母。步骤3:在开始字母字符匹配时,循环连续字符以匹配其余关键字。第4步:如果找到了所有字符匹配,那么第一个字符索引就是您所需的答案!!您可以使用System.Text.RegularExpression命名空间。下面是一个使用正则表达式匹配整个单词的示例:。然后可以使用Regex.Match(文本“\boak\b”).Index。请参见此处:或者您可以使用“\boak\b”,它查找单词boundariesstring text=“浸泡橡木”;var match=Regex.match(文本@“\s[oak]”);if(match.Success){Console.WriteLine(match.Index);//4}string text=“我能看到一只蟾蜍。”
Expected:13,实际:0@RobinBennett谢谢,我已将我的代码更新为您的建议@“\b”+Regex.Escape(searchText)+@“\b”
,以便放在保险柜上side@DmitryBychenko,感谢改进,答案更新:)[橡树]
在这里是不正确的:反例是“橡树不是橡树”
@DmitryBychenko是的,你是对的。谢谢。但是这个怎么样,@“\s(橡树)”?“橡树”
是@\s(橡树)
的反例:我们不希望模式中有明确的\s
;请看一下er shoaib的答案
5
parts.ToList().IndexOf("oak");
string text = "soak oak";
var match = Regex.Match(text, @"\s[oak]");
if (match.Success)
{
Console.WriteLine(match.Index); // 4
}