1

これは、リモート サーバーから解析された私の文字列の例です。

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

上記の文字列から、他の文字なしで区切られた単一の ValueS を推定する必要があります。

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

それを行うための正しいコードを提案してください(正規表現で成功せずに試しました)、ありがとう!

4

3 に答える 3

2

形式が変わらない場合は、正規表現を使用する必要はありません。

NSScanner、特にメソッドscanUpToString:intoString:とを使用してみてくださいscanString:intoString:

編集:

このコードは、必要なものである必要があります。

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]];
于 2013-02-20T14:25:26.660 に答える
1

これらの正確なキー名の正規表現は次のようなものです。

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

リストが可変長の場合は、内部でグループ化でき()?ます。任意のキーが必要な場合は、key=valueパターンを検出できるものをグループ化して繰り返す必要があります。

于 2013-02-20T14:13:58.580 に答える
-1

NSScanner を使用することもできます。link1 と link2 を参照しください

于 2013-02-20T14:28:59.817 に答える