Удалить скобки с регулярным выражением в C#

Я хочу удалить квадратные скобки из строки SQL, но только там, где внутри них нет пробелов.

Например. «SELECT [intId], [The Description]» должен возвращать «SELECT intId, [The Description]».

Я могу получить квадратные скобки без пробелов внутри с помощью регулярного выражения:

\[[^\s]*\]

Как удалить квадратные скобки из этих совпадений в исходной строке?


person Paul    schedule 06.02.2009    source источник
comment
Вы уверены, что хотите это сделать? Как насчет скобок в строковых литералах? Или имена столбцов, которые соответствуют зарезервированным словам?   -  person Joel Coehoorn    schedule 06.02.2009
comment
Конечно, я знаю, что здесь есть подводные камни. Я полагаю, моя более широкая проблема заключалась в том, как вы можете заменить совпадения регулярных выражений чем-то из самого совпадения. Я понимаю это сейчас, с помощью этого примера. Эта замена будет сделана только после парсинга строки.   -  person Paul    schedule 09.02.2009


Ответы (2)


Regex недостаточно, за исключением одноразового использования указанной выше конкретной строки. Если вы делаете это в автоматическом режиме с большим количеством строк SQL, вы можете столкнуться с кучей проблем, удаляя нужные вам скобки.

В этом случае вам нужно больше лексера/парсера SQL, который может помочь вам сосредоточиться только на именах столбцов и исключить имена таблиц, строки, параметры в триггерах или функциях и т. д.

person alphadogg    schedule 06.02.2009

person    schedule
comment
Вы можете улучшить читаемость этого выражения, используя @\[(\S+)\] - person Juliet; 06.02.2009
comment
Это может иметь проблемы с вложенными скобками. Так это или нет, зависит от правил синтаксиса, с которыми вы имеете дело. [foo[bar baz]] будет заменен на foo[bar baz]. - person nsayer; 06.02.2009
comment
Для SELECT [intId],[intId2], [The Description], [init[x]] это возвращает SELECT intId],[intId2, [The Description], init[x]. Если вы измените * (жадный) на *? (не жадный) результат будет SELECT intId,intId2, [The Description], init[x]. - person tymtam; 19.09.2012