C#返回包含另一个字符串的字符串中的单词

时间:2019-12-08 19:51:19

标签: c# string

您好,我是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

谢谢。

3 个答案:

答案 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)));