【问题标题】:Extract values between parenthesis from NSString从 NSString 中提取括号之间的值
【发布时间】:2011-02-01 20:38:19
【问题描述】:

我有一个类似于 "xxxx (yyyyy)" 的 NSString,其中 x 和 y 可以是任何字符。我想只从括号内提取 y 。我设法使用 NSScanner 提取 x,但我还没有找到提取 y 的正确方法。

【问题讨论】:

  • 如果 x 和 y 可以是括号,那么您将陷入痛苦的世界。
  • 听起来你想要正则表达式...

标签: objective-c cocoa nsstring


【解决方案1】:

只是为了完整:

如果您完全确定输出的格式,您可以使用数组方法:

NSString *inputString; // this is in the form "xxxx(yyyy)"

NSCharacterSet *delimiters = [NSCharacterSet characterSetWithCharactersInString:@"()"];
NSArray *splitString = [inputString componentsSeparatedByCharactersInSet:delimiters];

NSString *xString = [splitString objectAtIndex:0];
NSString *yString = [splitString objectAtIndex:1];

当然,你需要确保输入字符串中不存在分隔符

【讨论】:

  • yString 声明 (ojbectAtIndex) 中有一个小错字,splitString 声明中缺少分号。但除此之外完美无缺。谢谢。
  • @TPoschel 谢谢-如果您自己进行更正,我不会介意。 :)
【解决方案2】:

Scan up to '(',然后是 scan it,然后向上扫描到 ')'。上次扫描的结果是yyyy

【讨论】:

  • 没有正则表达式的解决方案!听,听!
【解决方案3】:

你可以看看 ParseKit 中的 PKTokenizer:

http://parsekit.com

【讨论】:

    【解决方案4】:

    最简单的方法是使用 RegExKit:

    http://regexkit.sourceforge.net/

    然后你会做这样的事情:

    [@"xxxx(yyyyy)" getCapturesWithRegexAndReferences:@"\\((.*)\\)",@"$1", &extractedString,nil];
    

    extractString 将包含括号中的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多