您好,我是C#的初学者,我想知道如何返回包含另一个字符串的字符串中的单词。
例如:
string s1 = "This is a string"
string s2 = "is"
我知道我可以使用以下代码返回整个字符串:
if (s1.Contains(s2))
{
Console.WriteLine(s1);
}
else
{
Console.WriteLine("{0} does not contain {1}",s1,s2);
}
但是如何只返回包含第二个字符串的单词?
如此:
Result: This is
谢谢。
答案 0 :(得分:3)
一个非常简单且快速的解决方案,假设您将“单词”定义为用<space>
分隔的字符串。
var containingWords = s1.Split(' ').Where(word => word.Contains(s2));
答案 1 :(得分:0)
string s1 = "This is a string";
string s2 = "is";
int _index = s1.IndexOf(s2);
if(_index > -1)
{
Console.WriteLine(s1.Substring(_index, _index + s2.Length));
}
答案 2 :(得分:0)
首先,您必须将字符串分成单词;假设单词是字母或撇号的序列,则可以借助正则表达式
var words = Regex
.Matches(s1, @"[\p{L}']+")
.Cast<Match>()
.Select(match => match.Value);
但是,您不希望全部 个字;例如,您必须借助 Linq Where
:
string[] words = Regex
.Matches(s1, @"[\p{L}']+")
.Cast<Match>()
.Select(match => match.Value)
.Where(word => word.Contains(s2))
.ToArray();
您可以Join
将所有找到的单词组合成一个字符串:
string result = string.Join(" ", Regex
.Matches(s1, @"[\p{L}']+")
.Cast<Match>()
.Select(match => match.Value)
.Where(word => word.Contains(s2)));