【问题标题】:Evaluate String using Lambda Expression [duplicate]使用 Lambda 表达式评估字符串 [重复]
【发布时间】:2018-10-26 20:33:44
【问题描述】:

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

"XYZ = XYZ"

我的目标是使用以下字符串来评估该字符串是返回真还是假。在本例中,结果应该为真,而在本例中:

"XYdddZ = XYZ"

`应该返回false。

基本上它看起来类似于:

if ("XYZ = XYZ"){

}

编辑:

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

【问题讨论】:

  • 只需在=Trim() 上拆分字符串,然后像往常一样进行比较...
  • 这看起来像是一个分配而不是一个比较。
  • 考虑为此使用库。逃跑是一个不错的选择。 github.com/mparlak/Flee
  • 你能解释一下你为什么需要这个吗,很少有人真正需要这个,但大多数时候有人要求一个字符串解析器比较工具是缺乏知识,如何达到实际结果?
  • @RandRandom 对新程序员来说一切都是字符串¯\_(ツ)_/¯

标签: c# lambda


【解决方案1】:

您不需要 lambda 表达式。只需Split 字符串并使用string.Equals。比如:

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

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

【讨论】:

  • 这可行,但是字符串可能是动态的并且包含类似“XYZ = XYZ and XYZ != XYaZ”的内容
  • @WadeMartin 请用所有规则和示例更新问题
  • @WadeMartin 这个问题是不完整的,除非你已经包含了所有需要回答的细节。
  • 然后您需要将其解析为表达式树,但鉴于您使用 = 表示“等于”(相对于 == 根据 C# 等),您不能使用 .NET C#编译器,并且鉴于您使用 != 表示不等于您也不能使用 VB 编译器 - 那么它是什么语言?
  • 如果您想解析类似 VB 的语法,stackoverflow.com/questions/37670024/… 可能会有所帮助(但您需要将 != 替换为 )
【解决方案2】:

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

 ([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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-01
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多