【问题标题】:Extract text from some parsed NSString从一些解析的 NSString 中提取文本
【发布时间】:2013-02-05 13:41:15
【问题描述】:

这是我的示例字符串,从远程服务器解析:

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"

请建议我正确的代码来做到这一点(我已经尝试过使用正则表达式但没有成功),谢谢!

【问题讨论】:

  • 示例字符串格式保持不变还是会改变?
  • 我认为您在示例中存在一些错误,例如使用 ':' 而不是 '=',或者没有为第二个参数编写 'ValueX=',请在此之前更正它们...
  • 对不起@apascua,但它是正确的:“Value1”有 ':' 而其他值有 '='

标签: ios objective-c regex nsstring nsregularexpression


【解决方案1】:

如果格式保持不变,则无需使用正则表达式。

尝试使用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]];

【讨论】:

  • 不客气。顺便说一句,这不是“正确的代码”,这只是我对解决问题的看法。给猫剥皮的方法总是不止一种!
【解决方案2】:

这些确切键名的正则表达式类似于:

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

如果列表是可变长度的,您可以在 ()? 内部进行分组如果您需要任意键,则需要分组并重复可以检测到 key=value 模式的内容。

【讨论】:

  • 我会改变你的正则表达式并使用非贪婪的量词,以防万一......用(.*?)替换(.*)
  • 谢谢@Peter,您能提供一些代码吗?我是初学者!
【解决方案3】:

您也可以使用 NSScanner 查看link1link2

【讨论】:

    猜你喜欢
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多