我一直在寻找具体内容如下:
我输入了字符串,其中源代码如下:
Z8 - Z8 FAIRLAND PARK(147)
我最终想要的是:
Z8 FAIRLAND PARK
我可以创建第一部分ok:
NSArray* parts = [tempString componentsSeparatedByString:@"- "];
NSString* result = [parts count] > 1 ? [parts objectAtIndex: 1] : [parts objectAtIndex: 0];
//NSLog (@"result: %@", result);
我可以通过以下方式完成后一部分:
if ([result length] > 0) {
result = [result substringToIndex:[result length] - 5];
}
但我知道这很好。 什么是更好的方式?
更新:
尝试回应评论和想法:
这是一个更大的数据集样本:(注意Z9路由 - 它在数据源处被截断。
我想我也可以截断名称字段中的所有路由信息,并使用RouteID作为名称。
{
Name = "Z8 - Z8 FAIRLAND (147)";
RouteID = Z8c;
},
{
Name = "Z8 - Z8 FAIRLAND (147)";
RouteID = Z8v1;
},
{
Name = "Z8 - Z8 FAIRLAND (147)";
RouteID = Z8v2;
},
{
Name = "Z8 - Z8 FAIRLAND (147)";
RouteID = Z8v3;
},
{
Name = "Z8 - Z8 FAIRLAND (147)";
RouteID = Z8v4;
},
{
Name = "Z8 - Z8 FAIRLAND (147)";
RouteID = Z8v5;
},
{
Name = "Z8 - Z8 FAIRLAND (147)";
RouteID = Z8v9;
},
{
Name = "Z9 - Z9 LAUREL-BURTONSVILL EXP (104";
RouteID = Z9;
},
{
Name = "Z9 - Z9 LAUREL-BURTONSVILL EXP (104";
RouteID = Z9c;
},
{
Name = "Z9 - Z9 LAUREL-BURTONSVILL EXP (104";
答案 0 :(得分:2)
这似乎是正则表达式的一个很好的候选者,例如修剪-
之前的所有内容以及最后括号中的数字,如下所示:
NSError *error;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^.*? -\\s*(.*?)\\s*\\(\\d*\\)?" options:0 error:&error];
NSAssert(regex, @"regex error %@", [error localizedDescription]);
NSString *string = @"Z8 - Z8 FAIRLAND PARK (147)";
NSTextCheckingResult *match = [regex firstMatchInString:string options:0 range:NSMakeRange(0, [string length])];
if (match) {
NSRange range = [match rangeAtIndex:1];
NSString *result = [string substringWithRange:range];
// use `result` here
}
这使用“捕获括号”来捕获中间的字符串。
很明显,我已经对你想要开始和结束的内容做了一些假设,但它说明了正则表达式的强大功能。