> (2009 RX7)</font></td>
>monospace" size="-1">214869 (2007 PAZ)</font></td>
>monospace" size="-1"> 4155 Accord</font></td>
我想知道是否有人可以给我一些帮助,我有一个NSString项目列表(见上文)我要解析一些数据。我的问题是,我没有可以在字符串中使用的标签,也没有我想要的项目有固定的位置。我要提取的数据是:
2009 RX7
2007 PAZ
4155 Accord
我的想法是,从右端更容易解析,删除</font></td>
然后使用“;”分开数据项:
(2009  RX7)
(2007  PAZ)
4155  Accord
可以将它们清理干净以匹配给定的示例。关于这样做或从右边开始工作的任何指示都将非常感激。
答案 0 :(得分:1)
试试这段代码:
NSString *str = @"> (2009 RX7)</font></td>";
NSRange fontRange = [str rangeOfString:@"</Font>" options:NSBackwardsSearch];
NSRange lastSemi = [str rangeOfString:@";" options:NSBackwardsSearch range:NSMakeRange(0, fontRange.location-1)];
NSRange priorSemi = [str rangeOfString:@";" options:NSBackwardsSearch range:NSMakeRange(0, lastSemi.location-1)];
NSString *yourString = [str substringWithRange:NSMakeRange(priorSemi.location+1, fontRange.location-1)];
此处的关键元素是NSBackwardsSearch
搜索选项。
答案 1 :(得分:1)
就我个人而言,我认为你最好使用正则表达式。所以我的解决方案是:
正则表达式:([0-9]+)[^;]+;([A-Za-z0-9]+)
对于所有示例文本,提供3个匹配项。即:
(2009 RX7)</font></td>
0:2009 RX7)<
1:2009
2:RX7
我没有对此进行编码,但确实在www.regextester.com
测试了正则表达式正则表达式是通过NSRegularExpression实现的,可在iOS 4.0及更高版本中使用。
修改强>
鉴于这似乎是一个网络抓取应用程序,你永远不知道那些讨厌的HTML代码猴子什么时候会改变他们的输出并打破你精心设计的匹配方法。因此,我会将我的正则表达式改为:
([0-9]+)([^;]+;)+([A-Za-z0-9]+)
其中添加了一个额外的组,但允许在数字和字符串之间添加任意数量的
元素。
答案 2 :(得分:0)
这应该可以解决问题:
NSString *s = @">monospace\" size=\"-1\"> 4155 Accord</font></td>";
NSArray *strArray = [s componentsSeparatedByString:@";"];
// you're interested in last two objects
NSArray *tmp = [strArray subarrayWithRange:NSMakeRange(strArray.count - 2, 2)];
在tmp中你会有类似的东西:
"4155 ",
"Accord</font></td>"
删除不需要的字符,你就完全了。
答案 3 :(得分:0)
使用NSRegularExpression
:
NSRegularExpression *regex;
NSTextCheckingResult *match;
NSString *pattern = @"([0-9]+) ([A-Za-z0-9]+)[)]?</font></td>";
NSString *string = @"> (2009 RX7)</font></td>";
regex = [NSRegularExpression
regularExpressionWithPattern:pattern
options:NSRegularExpressionCaseInsensitive
error:nil];
match = [regex firstMatchInString:string options:0 range:NSMakeRange(0, [string length])];
NSLog(@"'%@'", [string substringWithRange:[match rangeAtIndex:1]]);
NSLog(@"'%@'", [string substringWithRange:[match rangeAtIndex:2]]);
NSLog输出:
'2009'
'RX7'