【问题标题】:Using NSRegularExpression results使用 NSRegularExpression 结果
【发布时间】:2013-11-06 05:18:16
【问题描述】:

我正在尝试使用正则表达式将字符串分成不同的部分,例如用制表符分隔。我想将每个部分存储在其他地方,所以我的问题是如何正确使用正则表达式的所有结果? 假设我的正则表达式是这样的:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?:\t|^)([^\"\t]+|\"(?:[^\"]|\"\")*\")?"
                                options:NSRegularExpressionCaseInsensitive error:&error];
    NSUInteger numberOfMatches = [regex numberOfMatchesInString:string
                                options:0 range:NSMakeRange(0, [string length])];

我一次读取一行文件(出于某种原因需要这样做),所以这是我用来在每一行中搜索子字符串的代码部分:

for(int i=0;i<[myFile numberOfLines];i++){

        aRow = [[myFile fileRows] objectAtIndex:i];            

        NSArray* results = [regex matchesInString:aRow options:0 range:NSMakeRange(0, [aRow length])];
        for (NSTextCheckingResult* result in results) {

            NSString* resultString = [string substringWithRange:result.range];
            NSLog(@"I should be storing this as a correctly separated word:\t%@",resultString);
        }
    }

我做错了什么/错过了什么?打印的结果没有显示我认为他们应该显示的内容...... (myFile / fileRows / numberOfLines / current row / aRow 工作正常并包含它们应该在发布前检查、双重检查和三重检查的内容)

额外信息: 输入文件:

 number letter  data    something
 1  g   dvsfg   sdf
 2  az  "dbfghe fgh"    s
 4  b   wdf fghfgh
 3  c   sdgy    fdgh
 5  d   egfn    dkjfghfgkhj

返回(NSLog-wise:)

_____________number letter  data    something
 _____________number    letter
 _____________numbe
 _____________r da
 _____________a 
 _____________number    letter  
 _____________number    letter
 _____________number    letter  data    s

代替:

number
letter
data
something
1
g
dvsfg

...等(你明白了,每个选项卡在不同的 NSLog 消息中分隔“单词”)

【问题讨论】:

  • 输入是什么样的?你的模式应该做什么(或者这很明显)?你得到什么输出,你期望什么输出?
  • 原始问题已编辑,添加了请求的信息。感谢您到目前为止的快速回复:)
  • 不应该是NSString* resultString = [aRow substringWithRange:...吗? IE。 aRow 而不是那一行中的string
  • 就是这样,非常感谢您的帮助! PS:我已经编辑了原始的正则表达式,因为我也有一个小错误......

标签: objective-c regex expression


【解决方案1】:

根据我上面的评论:

NSString* resultString = [string substringWithRange:result.range];

应该是

NSString* resultString = [aRow substringWithRange:result.range];

【讨论】:

  • 抱歉,刚刚看到复选标记的东西,再次感谢您的帮助!
猜你喜欢
  • 2012-06-13
  • 2014-08-07
  • 2012-07-07
  • 2016-09-18
  • 2015-10-31
  • 1970-01-01
  • 2014-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多