2015-05-21 5 views
2

Я хочу извлечь только те слова между двумя запятыми. Таким образом, если строка Ab Java, DE, 78801 Ответ должен быть DE Я попробовал этот код, но он не работаетИзвлечь текст из строки между запятыми

string search = "Ab Java, DE, 78801 "; 
int index = search.IndexOf(","); 
string result = search.Substring(search.IndexOf(",") ,index); 
MessageBox.Show(result); 
+2

В вашей строке есть _always_ две запятые? –

+0

Да Он всегда имеет две запятые –

ответ

4

Если строка имеет всегда 2 запятые, вы можете использовать String.Split для него, как;

string search = "Ab Java, DE, 78801 "; 
Console.WriteLine(search.Split(',')[1]); // DE 

Помните, что это будет вам генерировать DE с дополнительным белым пространством перед ним.

enter image description here

Если вы не хотите, что пустое пространство, вы можете использовать TrimStart(), чтобы удалить его.

Console.WriteLine(search.Split(',')[1].TrimStart()); //DE 
+2

Что это за метод 'Dump()'? – Shaharyar

+1

Я не могу найти метод дампа, он дает ошибку –

+2

@Shaharyar Это метод расширения LINQPad. http://stackoverflow.com/questions/2699466/linqpad-dump-extension-method-i-want-one Я использовал этот инструмент для генерации некоторых примеров кода, но похоже, что иногда это может сбивать с толку. Удалил. –

3

начала и конца в вашей подстроке решимости к тому же значению.

Попробуйте использовать split и получить второй элемент, конечно, это предполагает, что ваш вход всегда следует шаблону в вашем примере. В противном случае вам нужно будет сделать что-то более сложное.

string[] searchItems = search.Split(','); 
string result = searchItems[1].Trim(); // will output DE 
0

Предполагая, что ваша строка всегда имеет только две запятые, то:

search.Split(", ")[1] 

даст вам нужный текст.

1

попробовать этот

string[] splitedStr=search.Split(','); 
string NewStr=splitedStr[1].ToString(); 
0

Попробуйте это ...

String str = "Ab Java, DE, 78801 "; 
String[] myStrings = str.split(","); 
String marco = myStrings[1]; 
0

Попробуйте это. Он может работать ...

string[] arrayStr = search.Split(','); 
int len = arrayStr.Length; 
for(int i =1;i<=len-2;i++) 
{ 
    MessageBox.Show(result); 
} 
+0

Просто для удобочитаемости: 'i <= len-2' равно' i Markus

0

Это то, что я бы решил с помощью регулярных выражений. Это может быть медленнее, чем решения String.Split, но это проще читать, особенно если шаблон будет развиваться с течением времени.

Решение будет чем выглядеть следующим образом:

string search = "Ab Java, DE, 78801 "; 
Regex r = new Regex(", *(.*) *,", RegexOptions.Compiled); 
Console.WriteLine(r.Match(search).Groups[1].ToString()); 

Об этом пишет DE без окружающего пространства. Экземпляр регулярного выражения должен быть статическим членом вашего класса, так как я предполагаю, что это происходит в цикле ...

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