嵌套括号的正则表达式或字符串解析

时间:2014-03-28 06:09:24

标签: c# .net regex string-parsing

将以下字符串视为输入。第二个&第三个AND是多余的。我想删除它。

输入

 AND(AND(string("test message")),filter(AND(OR(source:string("XYZ"),source:string("ABC")))))

我希望输出为

 AND(string("test message"),filter(OR(source:string("XYZ"),source:string("ABC"))))

基本上输入字符串使用AND运算符,但只指定了一个参数,这使输入成为无效字符串。我想修改字符串以删除AND,以便它只有一个参数指定。

什么是最好的方法。正则表达式或字符串解析。我的字符串可能很长。

我检查了多个帖子&似乎不建议使用正则表达式,特别是如果它嵌套太多。

请建议处理此案的最佳方法。

一些输入&他们的输出

1。     AND(字符串(""测试消息""))

string(""test message"")
  1. AND(AND(字符串(""测试信息"")),过滤器(AND(OR):来源:字符串("" XYZ""),来源:字符串("" ABC""))))))

    AND(字符串(""测试消息""),过滤器(OR(来源:字符串("" XYZ"" ),来源:字符串("" ABC""))))

  2. AND(字符串(""测试信息""),过滤(OR(来源:字符串("" XYZ"& #34),来源:字符串("" ABC""))))  AND(字符串(""测试消息""),过滤(OR(来源:字符串("" XYZ""),来源:字符串("" ABC""))))

  3. Annu

2 个答案:

答案 0 :(得分:1)

如果你采用正则表达式路线,那么一个积极​​的前瞻,然后是负向前瞻可能会起作用:

string result = Regex.Replace(searchText, "(?i)(?x)(?(?<!AND\\()AND\\()|(?(?=\\){2})(?!\\){3})\\))", "");

输入:

AND(AND(string("test message")),filter(AND(OR(source:string("XYZ"),source:string("ABC")))))

AND(string(""test message""))

AND(string(""test message""),filter(OR(source:string(""XYZ""),source:string(""ABC"")))) 

结果:

AND(string("test message"),filter(OR(source:string("XYZ"),source:string("ABC"))))

string(""test message"")

string(""test message""),filter(OR(source:string(""XYZ""),source:string(""ABC""))) 

答案 1 :(得分:0)

I tried it in tcl , this is the soultion

regsub -all {\(AND} $string "" string .u will get the expected output