Премахване на скоби с регулярен израз в 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 lexer/parser, който може да ви помогне да се съсредоточите само върху имената на колоните и да изключи имена на таблици, низове, параметри в тригери или функции и т.н.

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