c# - How to replace a string in this case? -
c# - How to replace a string in this case? -
i'm implementing filter.
i store filter criteria in list of string. e.g. list filters
a filter logic string e.g.
string filterlogic = "(1 , 2) or 3";
now want replace numbers filter criteria, e.g.
(filters[1] , filters[2]) or filters[3])
//stores filter criterias list<string> filters = new list<string>(); (int = 1; <= 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(" "); sb.append("'%"); sb.append(textboxvalue); sb.append("%'"); break; case "does not contain": sb.append(" not "); sb.append("'%"); sb.append(textboxvalue); sb.append("%'"); break; case "starts with": sb.append(" "); sb.append("'"); sb.append(textboxvalue); sb.append("%'"); break; } filters.add(sb.tostring()); }
update:
list<string> l = new list<string>(); (int = 1; < 12; i++) { string s="hello"+i; l.add(s); } string ss = "(1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11)"; regex rgx = new regex(@"\d+"); ss=rgx.replace(ss, "l[$0]");
this gives me : "(l[1] , l[2] , l[3] , l[4] , l[5] , l[6] , l[7] , l[8] , l[9] , l[10] , l[11])"
what want is: (hello1 , hello2 , hello3 , hello4 , hello5 , hello6 , hello7 , hello8 , hello9 , hello10 , hello11)";
given integers indices, 1 can following:
regex rgx = new regex (@"\d+"); rgx.replace(fitlerlogic, "filters[$0]");
then result is:
"filters[1] , filters[2]) or filters[3]"
but only works if integers should replaced filter
indices.
you made way typo: it's filterlogic
, not fitlerlogic
.
edit: or if want substitute real value, can utilize lambda-expression:
object[] filter = new object[] {false,true,false,true};//not array 0-indexed regex rgx = new regex (@"\d+"); rgx.replace (fitlerlogic,x => filter[int.parse(x.value)].tostring());
in case result is:
"(true , false) or true"
if wish evaluate expression, take compiler-compilers , context-free grammars.
c# regex string
Comments
Post a Comment