2014-03-28 3 views
2

Рассмотрим следующую строку в качестве входных данных. Второй & третий И являются избыточными. Я хочу удалить его.Регулярное выражение или разбор строк для вложенных скобок

Входной

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 так, чтобы в ней был указан только один аргумент.

Какой должен быть наилучший подход. Регулярное выражение или синтаксический анализ строк. Моя строка может быть очень длинной.

Я проверил несколько сообщений & Кажется, что регулярное выражение не рекомендуется, особенно если оно слишком много вложенных.

Пожалуйста, предложите лучший способ справиться с этим делом.

Некоторые входные & их вывод

1. И (строка ("" Тестовое сообщение ""))

string(""test message"") 
  1. И (И (строка ("" Тестовое сообщение "")), фильтр (AND (OR (источник: строка ("" XYZ ""), источник: строка ("" ABC "")))))

    И (строка ("" тестовое сообщение "") фильтр (OR (источник: строка ("" XYZ ""), источник: строка ("" ABC ""))))

  2. И (строка ("" тестовое сообщение ""), фильтр (ИЛИ (источник: строка ("" XYZ ""), источник: строка ("" ABC "")))) И (строка ("" Тестовое сообщение ""), фильтр (ИЛИ (источник: строка ("" XYZ ""), источник: строка ("" АВС ""))))

Annu

+0

вы хотите только второй и третий 'AND' быть удален? ничего более-менее? – aelor

+0

Не хотите ли вы также удалить связанные скобки? – sshashank124

+0

@ sshashank124 - yes Я хочу удалить связанную скобку –

ответ

0
I tried it in tcl , this is the soultion 

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

спасибо за ваш ответ, Можете ли вы регулярное выражение, которое я могу использовать с C# –

+0

Я не знаком с C#, но просто проверяю команду regex.replace и попробуйте – Pac

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""))) 
+0

Спасибо, что это сработало, но для конкретного ввода. В основном я хочу проверить ввод пользователя. Рассмотрим эту строку И (строка ("" тестовое сообщение ")). Это недопустимая строка, потому что AND используется двумя значениями, которые не упоминаются, я хочу удалить такой оператор AND/string. поэтому выход будет строкой («тестовое сообщение»). Можете ли вы дать регулярное выражение для него –

+0

, это просто - вы можете использовать шаблон, который я создал, и изменить его на ваш контент. '(AND \\() | (? = \\) {2}) \\)' приведет к 'string (" "test message" ")'. Заметьте, что я немного изменил 'AND', сдвинув символ' ('и удалив условный положительный/отрицательный результат. Шаблон по существу [это] (http://regex101.com/r/jH9bA6), но изменен для C# Играйте с ним, и вы должны быстро получить представление о том, как это работает: волшебная формула для вашего оригинального вопроса действительно находится в условном положительном/отрицательном взгляде, который я использовал. Второй пример - всего лишь несколько его частей. –

+0

[Вот пример] (http://regex101.com/r/bH4iB6), с которым вы можете работать в отношении вашего первого вопроса. Переключите 'AND' в шаблон с помощью' THIS', и вы заметите, как он обрабатывает дополнительное выражение Разница в шаблонах заключается в том, что в C# необходимо использовать два '\\' escape-символа вместо одного. –

Смежные вопросы