2013-02-20 4 views
1

Это мой пример строки, проанализирован с удаленного сервера:Извлечение текста из некоторых разобран NSString

NSString *example = @"#parsed Value1:1a 2013-02-20 10:00:00 UTC Value2=2a Value3=3a Value4=4aKm Value5=A" 

мне нужно экстраполировать отдельные значения из указанной выше строки, разделенные, без других символов:

"1a" 
"2013-02-20 10:00:00 UTC" 
"2a" 
"3a" 
"4a" 
"A" 

Пожалуйста, предложите мне правильный код для этого (я пробовал без успеха с регулярным выражением), спасибо!

+0

пример строка формат остается такой же или он изменится? – DeveshM

+0

Он остается таким же ... – Huxley

+0

Я думаю, что у вас есть некоторые ошибки в примере, например, используя «:» вместо «=» или не записывая «ValueX =» для второго параметра, пожалуйста, исправьте их до ... – apascual

ответ

2

Если формат останется таким же, вам не нужно использовать регулярное выражение.

Попробуйте использовать NSScanner, в частности, методы scanUpToString:intoString: и scanString:intoString:

EDIT:

Этот код должен быть то, что вам нужно:

NSString *example = @"#parsed Value1:1a 2013-02-20 10:00:00 UTC Value2=2a Value3=3a Value4=4aKm Value5=A"; 

NSString *temp, *value1, *date, *value2, *value3, *value4, *value5; 
NSScanner *scanner = [NSScanner scannerWithString:example]; 
// By default, NSScanner will skip whitespace - we don't want it to skip anything here 
[scanner setCharactersToBeSkipped:[NSCharacterSet characterSetWithCharactersInString:@""]]; 
[scanner scanString:@"#parsed Value1:" intoString:&temp]; 
[scanner scanUpToString:@" " intoString:&value1]; 
[scanner scanString:@" " intoString:&temp]; 
[scanner scanUpToString:@" Value2=" intoString:&date]; 
[scanner scanString:@" Value2=" intoString:&temp]; 
[scanner scanUpToString:@" Value3=" intoString:&value2]; 
[scanner scanString:@" Value3=" intoString:&temp]; 
[scanner scanUpToString:@" Value4=" intoString:&value3]; 
[scanner scanString:@" Value4=" intoString:&temp]; 
[scanner scanUpToString:@" Value5=" intoString:&value4]; 
[scanner scanString:@" Value5=" intoString:&temp]; 
value5 = [example substringFromIndex:[scanner scanLocation]]; 
+0

Спасибо, @ c.cam108, это правильный код! – Huxley

+0

Добро пожаловать. Кстати, это не «правильный код», это всего лишь мое решение проблемы. Всегда есть более чем один способ кошки кошки! – colincameron

+0

Eheh, один из правильных кодов для моего вопроса, конечно :) – Huxley

1

Регулярное выражение для этих точных ключевых имен что-то вроде:

#parsed Value1:(.*) (.*) Value2=(.*) Value3=(.*) Value4=(.*) Value5=(.*) 

Если список переменной длины, вы можете группировать внутри ()? Если вам нужны произвольные ключи, вам нужно сгруппировать и повторить что-то который может обнаружить шаблон key=value.

+0

Я бы изменил ваше регулярное выражение и использовал не жадные кванторы, на всякий случай .... Замените '(. *)' с '(. *?)' –

+0

Спасибо, @Peter, пожалуйста, можете ли вы предоставить какой-то код для этого? Im очень новичок в этом! – Huxley