2015-02-16 4 views
1

У меня есть строка, которая содержит скобки [] вокруг числа. Поскольку эта строка представляет собой мои имена столбцов для базы данных SQL, мне нужно их удалить или заменить. До сих пор я сделать это следующим образом:Заменить [] скобка в строке

if (stringWithBracket.Contains("[0]")) 
    noBracket = data.Replace("[0]", "0"); 
if (stringWithBracket.Contains("[1]")) 
    noBracket = data.Replace("[1]", "1"); 
if (stringWithBracket.Contains("[2]")) 
    noBracket = data.Replace("[2]", "2"); 
if (stringWithBracket.Contains("[n]")) 
    noBracket = data.Replace("[n]", "n"); 

Он отлично работает, но выглядит некрасиво для меня, так как я должен сделать это для [1] до [20]. Есть ли способ реализовать это «приятнее», что означает, что для меня меньше кода?

+1

Скобки также вокруг чего-то другого, чем число, и вы хотите сохранить их в этом случае? – Steve

+0

Вы можете использовать регулярное выражение для соответствия только конкретному шаблону, например: '\ [\ (d +) \]', а затем заменить совпадения их содержимым. Скобки используются для извлечения содержимого –

+0

Кстати, какова проблема, которую вы пытаетесь решить? Как заключенный в скобки номер в выражении SQL, хотя они не являются именами столбцов? Являются ли они заполнителями для значений или параметров? –

ответ

6

Вы можете использовать Regex.Replace, чтобы обеспечить только извлечь номера:

var pattern = @"\[(\d+)\]"; 
var replaced = Regex.Replace(stringWithBracket, pattern, "$1"); 
+0

Почему петля ?? Однократное исполнение заменит все скобки номерами на их содержимое –

+0

@PanagiotisKanavos В зависимости от его требований, я согласен с вами. Я изменю эту часть. Спасибо за комментарий. – oopbase

+0

@ Forlan07: Большое спасибо. Он работает отлично. Это именно то, что я искал. Я думаю, мне придется провести некоторое время с REGEX. – ck84vi

3

Кажется, вы хотите, чтобы удалить все скобки:

data = data.Replace("[",string.Empty).Replace("]",string.Empty); 
+2

Это приведет к удалению всех скобок, а не только чисел вокруг –

+0

Да, это ... –

3

Так что вы хотите basicaly петлю?

for (int i = 0; i <= 20; i++) 
{ 
    noBracket = data.Replace(String.Format("[{0}]", i), i); 
} 
+1

Вам не нужно проверять, содержит ли скобка фактическую информацию в строке, вы можете просто вызвать замену в любом случае. Однако классный ответ. – HimBromBeere

+0

после экстенсивного царапания моего подбородка, я должен признать: вы правы! Я отредактирую свой ответ. – Marco

+1

Это создаст довольно много временных строк во множестве итераций, ограничено лимитами цикла и может даже не найти правильные номера, например, если есть только два числа с именем '[100], [200]'. С другой стороны, Regex создаст только конечную строку за одну операцию и будет работать с любым числом. –

2

Это та вещь, что регулярные выражения хорошо:

noBracket = Regex.Replace(stringWithBracket, @"\[(\d+\)]", "$1") 

Это соответствует [ (требуется экранирование как открывающая скобка, обычно начинается группа символов), за которой следует одна или несколько цифр, за которой следует закрывающая скобка. Цифры захватываются (круглые скобки), поэтому их можно использовать в выражении замещения.

Это заменяет все вхождения в строке, для замены только первого требуется более сложное регулярное выражение, которое будет совпадать только один раз.

+4

Не '$ 0' вернуть всю строку вместо фактической группы соответствия? – HimBromBeere

+0

@HimBromBeere Да. Типично ... исправлено – Richard

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