使用Lambda表达式评估字符串

时间:2018-10-26 20:33:45

标签: c# lambda

我的目标是使用.net core和c#评估以下内容。

"XYZ = XYZ"

我的目标是使用以下字符串评估该字符串是否返回true或false。在此示例中,结果应为true,在此示例中:

"XYdddZ = XYZ"

`应该返回false。

基本上看起来类似于:

if ("XYZ = XYZ"){

}

编辑:

该字符串可能是动态的,并且包含类似“ XYZ = XYZ和XYZ!= XYaZ”的内容,因此拆分可能很困难

2 个答案:

答案 0 :(得分:0)

您不需要lambda表达式。只需Split字符串,然后使用string.Equals。像这样:

var input = "XYZ = XYZ";
var split = input.Split('=');

return string.Equals(split[0].Trim(), split[1].Trim());

答案 1 :(得分:0)

您可以使用如下所示的正则表达式:

 ([a-zA-Z]\w*)\s*(<|>|(={1,2})|!=)\s*([a-zA-Z]\w*)

这将匹配三件事:

  1. 由大写或小写字符后跟任意数量的大写或小写字符或数字组成的单词
  2. “ =“,“ ==”,“ <”或“>”之一进行比较
  3. 定义与#1相同的单词。

在那之后,您所要做的就是获取匹配项和组,查看两个单词并查看比较类型,然后从那里开始。

以下是一些使用此示例代码:

 private void RegexTest()
 {
     var regex = new Regex(@"([a-zA-Z]\w*)\s*(<|>|(={1,2})|!=)\s*([a-zA-Z]\w*)");
     var inputs = new string[]
     {
         "XYZ = XYZ",
         "ABC != A",
         "1 > 3",
         "a12 < m34"
     };
     foreach (var input in inputs)
     {
         var match = regex.Match(input);
         if (match.Length > 0)
         {
             Debug.WriteLine($"Match for ({input}): First: {match.Groups[1]}, Comparer: {match.Groups[2]}, Second: {match.Groups[4]}");
         }
         else
         {
             Debug.WriteLine($"No match for {input}");
         }
     }
 }

这将导致输出如下所示:

Match for (XYZ = XYZ): First: XYZ, Comparer: =, Second: XYZ
Match for (ABC != A): First: ABC, Comparer: !=, Second: A
No match for 1 > 3
Match for (a12 < m34): First: a12, Comparer: <, Second: m34