2010-07-22 2 views
2
string temp_constraint = row["Constraint_Name"].ToString(); 
string split_string = "FK_"+tableName+"_"; 
string[] words = Regex.Split(temp_constraint, split_string); 

Я пытаюсь разбить строку, используя другую строку.Пожалуйста, расскажите, в чем проблема: C# regex.split()

temp_constraint = FK_ss_foo_ss_fee 
split_string = FK_ss_foo_ 

но он возвращает один массив размера с одной и той же строке, что и в temp_constraint

Пожалуйста, помогите

+0

, что вы пытаетесь получить? И я согласен с Дарином. – Robaticus

+0

Спасибо за указание, что вы Дарин, я почти ответил на вопрос случайно –

+0

@Henk, теперь, когда я открываю профиль, есть много принятых ответов. Странный. Я думаю, некоторые проблемы кеширования, или OP действительно работал над этим :-) –

ответ

1

Сплите операция отлично работает для меня :

string temp_constraint = "FK_ss_foo_ss_fee"; 
string split_string = "FK_ss_foo_"; 
string[] words = Regex.Split(temp_constraint, split_string); 
foreach (string word in words) 
{ 
    Console.WriteLine(">{0}<", word); 
} 

Выход:

 
>< 
>ss_fee< 

Я думаю, что проблема в том, что ваши переменные не настроены на то, что вы думаете. Вам нужно будет отладить, чтобы найти ошибку в другом месте вашей программы.

Я бы также не использовал Split для этого (обаи String.Split). Вы не разделяете входные данные - вы удаляете строку с самого начала. Сплит может не всегда делать то, что вы хотите. Представьте себе, если у вас есть внешний ключ, как в следующем:

FK_ss_foo_ss_fee_FK_ss_foo_ss_bee 

Вы хотите получить ss_fee_FK_ss_foo_ss_bee но раскол даст вам ss_fee_ и ss_bee. Это надуманный пример, но он показывает, что то, что вы делаете, не является расколом.

+0

проблема возникает у split_string = "FK _" + tableName + "_"; Я использовал точку останова, чтобы проверить значение tableName, и это точно показывает, что я хотел. Я не понимаю причину. Когда я использую статическую строку, расщепление происходит должным образом. Но это не то же самое, когда я использую переменную – Yash

+0

@Yash: Ваша переменная, вероятно, содержит некоторый символ, который не так, как вы думаете. Возможно, дополнительное пространство. Проблема, скорее всего, связана с содержимым «tableName». –

1

Вы должны использовать String.Split вместо

string[] words = 
    temp_constraint.Split(new []{split_string}, StringSplitOptions.None); 
+0

Даже предложенный метод не работает. Я тоже это пробовал. Я не уверен, почему он не работает, когда я использую переменную для создания переменной split_string как таковой. Вместо этого я использовал string.replace (splitstring, ""); и он работал правильно, и это служит моей цели. – Yash