我如何检查某物是否包含 XY,但它也可以是 XZY?

How do i check if something contains XY, but it can also be XZY?

这是代码

    Console.WriteLine("Hello!");
    string greeting = Console.ReadLine();
    if (greeting.ToLower().Contains("hello how are you")) ;
    {
        Console.WriteLine("I am good");
    }

这段代码有问题,如果用户说类似Hello jfjf how fjjffj are you的话,程序仍然会回复他。我需要的是 greeting 必须是 Hello,然后 X 数量的任何字符串(其中每个字符串将被 space 分割),how are you,所以像 Hello thomas anderson how are you 会起作用,但像 Hello 8grrgh how jrjr are me you 这样的东西不会起作用

您可以使用下面的示例代码来实现

private static bool CheckStringExists(string input, string userInput)
        {
            var inputArray = input.ToLower().Split(' ');
            var userInputArray = userInput.ToLower().Split(' ');

            int i = 0, j = 0;
            while (i < inputArray.Length && j < userInputArray.Length)
            {
                if (inputArray[i] == userInputArray[j])
                {
                    i++;
                }
                j++;
            }

            return i == inputArray.Length;
        }

以上方法可以调用为

if (CheckStringExists("hello how are you", greeting)) ;
    {
        Console.WriteLine("I am good");
    }

这是工作代码here

我想你为此需要一个正则表达式:

var r = new Regex("Hello .* how are you");
if(r.IsMatch(myString)) 
{ 
    Console.WriteLine("I am good");
}

这将匹配 "Hello thomas anderson how are you" 但不匹配 "Hello jfjf how fjjffj are you"

我在 Visual studio 上进行了这样的测试并且工作正常。

            Console.WriteLine("Hello!");
            string greeting = Console.ReadLine();
            if (greeting.ToLower().StartsWith("hello") && greeting.ToLower().EndsWith("how are you")) 
            {
                Console.WriteLine("I am good");
            }