Workflow Foundation:C#从字符串解析VB表达式

时间:2016-12-29 13:35:57

标签: c# vb.net algorithm

我需要从以下字符串计算VB表达式:

"stringVar1  =   \"stringVar1Value\"    and boolVar1<>False or intVar1=22 and    intVar2=33"

"stringVar1=  \"stringVar1Value\" and boolVar1<>False or intVar1=22 and intVar2=33"

"stringVar1  =   \"stringVar1Value\"    and boolVar1<>False or intVar1=22 and    intVar2=33"

我需要将它解析为类

的变量数组
 public class ExpressionUnit
    {
        public string Variable { get; set; }
        public string Operator { get; set; }
        public string Value { get; set; }
    }

Variable是&#34; stringVar1&#34;,Operator是&#34; =&#34;并且Value是&#34; stringVar1Value&#34;。 或严格按顺序排列的字符串数组:

{ "stringVar1", "=", "stringVar1Value", "and", "boolVar1", "<>", "False", "or", "intVar1", "=", "22", "and", "intVar2", "=", "33" }

我会批评任何建议或想法。

2 个答案:

答案 0 :(得分:0)

我找到了一些解决方案:

<html>
   <body>
      <table>
         <tbody>
            <tr>
               <td>clickAndWait</td>
               <td>css=input.button</td>
               <td></td>
            </tr>
            <tr>
               <td>assertXpathCount</td>
               <td>//*[name() = 'ProductNumber' and text() = 'ABC']</td>
               <td>1</td>
            </tr>
         </tbody>
      </table>
   </body>
</html>

单元测试证明它有效:

 public static class StringParser
{
    public static List<string> ParseExpression(string expression)
    {
        //expression = System.Text.RegularExpressions.Regex.Replace(expression, @"\s+", " ");

        string word = string.Empty;
        int i = 0;
        List<string> list = new List<string>();
        while (i < expression.Length)
        {
            if (expression[i] == ' ')
            {
                if (!string.IsNullOrEmpty(word))
                {
                    list.Add(word);
                    word = string.Empty;
                }
                i++;
                continue;
            }
            if (expression[i] == '=')
            {
                if (!string.IsNullOrEmpty(word))
                {
                    list.Add(word);
                }
                word = new string(expression[i], 1);
                list.Add(word);
                word = string.Empty;
                i++;
                continue;
            }
            if (expression[i] == '<')
            {
                if (!string.IsNullOrEmpty(word))
                {
                    list.Add(word);
                }
                word = new string(expression[i], 1);
                i++;
                word += expression[i];
                list.Add(word);
                word = string.Empty;
                i++;
                continue;
            }

            word += expression[i];
            i++;
            if (!string.IsNullOrEmpty(word) && i == expression.Length)
            {
                list.Add(word);
            }
        }

        return list;
    }
}

enter image description here

答案 1 :(得分:0)

using System.Diagnostics;
using System.Text.RegularExpressions;

namespace MrB
{
    class Program
    {
        static void Main()
        {
            string s1 = "stringVar1  =   \"stringVar1Value\"    and boolVar1<>False or intVar1=22 and    intVar2=33";
            string s2 = "stringVar1=  \"stringVar1Value\" and boolVar1<>False or intVar1=22 and intVar2=33";
            string s3 = "stringVar1  =   \"stringVar1Value\"    and boolVar1<>False or intVar1=22 and    intVar2=33";

            var rgx = new Regex("=");
            var replacement = " = ";

            string s1b = rgx.Replace(s1, replacement);
            string s2b = rgx.Replace(s2, replacement);
            string s3b = rgx.Replace(s3, replacement);

            rgx = new Regex(@"\s+");
            replacement = " ";

            string s1c = rgx.Replace(s1b, replacement);
            string s2c = rgx.Replace(s2b, replacement);
            string s3c = rgx.Replace(s3b, replacement);

            string[] s1List = s1c.Split(' ');
            string[] s2List = s2c.Split(' ');
            string[] s3List = s3c.Split(' ');

            Debugger.Break();
        }
    }
}