我有这个字符串返回:
“周一至周五上午8:00 - 下午7:30”
我需要消除mon-fri的东西才能得到这个:
“上午8:00 - 下午7:30”
然后我需要将其拆分为开放时间和关闭时间,以确定其是否开启:
“上午8:00”&& “7:30 PM”
但是有很多商店,他们有不同的开始和结束时间,所以我不能从8或类似的东西中提取6个字符。
到目前为止,我决定走这条路:
NSRange startRange = [storeTime.text rangeOfString:@"-"];
NSString *openString = [storeTime.text substringWithRange:NSMakeRange(16, startRange.location-17)];
NSString *closeString = [storeTime.text substringWithRange:NSMakeRange(startRange.location+2, storeTime.text.length-(startRange.location+2))];
但是看起来我可能会因为16岁的硬编码而破裂,这让我想知道它是否会在其他任何地方打破。关于如何实现这个目标的任何更好的想法?
答案 0 :(得分:8)
您可以使用NSRegularExpression
从字符串中抓取两个时间字符串:
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression
regularExpressionWithPattern:@"\\d{1,2}:\\d{2} (AM|PM)"
options:NSRegularExpressionCaseInsensitive
error:&error];
NSString *str = @"Monday thru Friday 8:00 AM - 7:30 PM";
NSArray *m = [regex matchesInString:str
options:0
range:NSMakeRange(0, str.length)];
答案 1 :(得分:5)
如果您知道时间间隔之前的文本始终采用<someday> thru <someday>
格式,那么您可以找到第一个数字字符(数字)的索引,并从该索引中获取子字符串。
然后,使用@" - "
方法在componentsSeparatedByString:
上拆分时间字符串。
示例:
NSString *s = @"monday thru sunday, 0:00 - 23:59";
NSCharacterSet *digits = [NSCharacterSet decimalDigitCharacterSet];
int idx = [s rangeOfChatacterFromSet:digits].location;
NSString *timeStr = [s substringFromIndex:idx];
NSArray *timeStrings = [timeStr componentsSeparatedByString:@" - "];
答案 2 :(得分:0)
如何通过替换某些字符串的出现来先行。
因此请使用[string stringByReplacingOccurrencesOfString:@"Monday" withString: @""];
删除所有日期,可能是“直通”字符串。
然后你就离开了。别忘了留意太空人物。
希望这有帮助。