在这种情况下如何替换字符串?

时间:2015-04-08 18:53:20

标签: c# regex string

我正在实施过滤器。

我将过滤条件存储在字符串列表中。例如     列出过滤器

过滤逻辑作为字符串,例如

String filterLogic = "(1 AND 2) OR 3";

现在我想用过滤条件替换数字,例如

(过滤器[1]和过滤器[2])或过滤器[3])

//stores all the filter criterias
        List<String> filters = new List<string>();

        for (int i = 1; i <= controlGroupId;i++ )
        {
            StringBuilder sb = new StringBuilder();
            String fieldsDropdownId="dlFields"+i;
            DropDownList dlFields = (DropDownList)this.FindControl(fieldsDropdownId);
            sb.Append(dlFields.SelectedValue);


            String operatorDropdownId = "dlOperator" + i;
            DropDownList dlOperator = (DropDownList)this.FindControl(operatorDropdownId);
            String operatorValue = dlOperator.SelectedValue;                

            String valuetxbId = "txb" + i;
            TextBox tb = (TextBox)this.FindControl(valuetxbId);
            String textboxValue = tb.Text;

            switch (operatorValue)
            {
                case "=":
                    sb.Append("=");
                    sb.Append(textboxValue);
                    break;
                case "<>":
                    sb.Append("<>");
                    sb.Append(textboxValue);
                    break;
                case "<":
                    sb.Append("<");
                    sb.Append(textboxValue);
                    break;
                case ">":
                    sb.Append(">");
                    sb.Append(textboxValue);
                    break;
                case ">=":
                    sb.Append(">=");
                    sb.Append(textboxValue);
                    break;
                case "<=":
                    sb.Append("<=");
                    sb.Append(textboxValue);
                    break;
                case "contains":
                    sb.Append(" Like ");
                    sb.Append("'%");
                    sb.Append(textboxValue);
                    sb.Append("%'");
                    break;
                case "does not contain":
                    sb.Append(" Not Like ");
                    sb.Append("'%");
                    sb.Append(textboxValue);
                    sb.Append("%'");
                    break;
                case "starts with":
                    sb.Append(" Like ");
                    sb.Append("'");
                    sb.Append(textboxValue);
                    sb.Append("%'");
                    break;
            }


            filters.Add(sb.ToString());
        }

更新

    List<String> l = new List<string>();
        for (int i = 1; i < 12; i++)
        {
            String s="hello"+i;
            l.Add(s);
        }
        String ss = "(1 AND 2 AND 3 AND 4 AND 5 AND 6 AND 7 AND 8 AND 9 AND 10 AND 11)";


        Regex rgx = new Regex(@"\d+");

        ss=rgx.Replace(ss, "l[$0]"); 

这给了我: “(l [1] AND l [2] AND l [3] AND l [4] AND l [5] AND l [6] AND l [7] AND l [8] AND l [9] AND l [10 ]和l [11])“

我想要的是: (hello1 AND hello2 AND hello3 AND hello4 AND hello5 AND hello6 AND hello7 AND hello8 AND hello9 AND hello10 AND hello11​​)“;

1 个答案:

答案 0 :(得分:1)

鉴于所有整数都是索引,可以执行以下操作:

Regex rgx = new Regex (@"\d+");
rgx.Replace(fitlerLogic, "filters[$0]");

然后结果是:

"filters[1] AND filters[2]) OR filters[3]"

但如果所有整数都应该用filter索引替换,则有效。

你也是一个错字的方式:它是filterLogic,而不是fitlerLogic

编辑:或者如果您想用实际值替换它,可以使用 lambda-expression

object[] filter = new object[] {false,true,false,true};//not that an array is 0-indexed
Regex rgx = new Regex (@"\d+");
rgx.Replace (fitlerLogic,x => filter[int.Parse(x.Value)].ToString());

在这种情况下,结果是:

"(True AND False) OR True"

如果您希望评估表达式,我会查看编译器编译器无上下文语法

相关问题