2013-04-29 5 views
1

08:30:00 AM 및/또는 12:45:00 PM 등과 같이 시간 값이 포함 된 문자열이 있습니다. 이제 '초'값이 포함 된 부분을 제거해야합니다. 이 문자열에서 08:30 AM 및/또는 12:45 PM 등과 같은 상위 문자열을 만들 수 있습니다. 문자열에 항상 HH : MM : SS 값의 시간 문자열이 포함될 필요가 없으므로 NSDateFormatter를 사용할 수 없습니다. 문자열 값 else .. 그래서 patttern 매칭을 통해해야만합니다.긴 문자열의 시간 형식 정규 표현식 수정

나는 다음 코드를 사용할 수 있음을 알고 있습니다. 하지만 내가 알아야 할 것은 문자열을 찾고 수정하는 정규식이 무엇인지에 있습니다. 사전에

NSString *string = @"string containing 08:30:00AM values and some text"; 
NSError *error = NULL; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"???" options:NSRegularExpressionCaseInsensitive error:&error]; 
NSString *modifiedString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@""]; 
NSLog(@"%@", modifiedString); 

감사합니다 ..

답변

1

은 그냥 자신의 질문의 라인을 따라이 정규식 패턴을 대답을주고 당신이 후에있는 시간 형식과 일치하고 괄호는 시간과 분 일부를 캡처하고 수정 된 문자열에 보관 할 수 있습니다 :

NSString *timeText = @"This is a text with 08:30:23 and 9:23:54AM to test both formats."; 

NSString *timePattern = @"([0-9]{1,2}:[0-9]{2}):[0-9]{2}"; 

NSError *error = NULL; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:timePattern 
                     options:0 
                     error:&error]; 

NSString *modifiedString = [regex stringByReplacingMatchesInString:timeText 
                  options:0 
                  range:NSMakeRange(0, timeText.length) 
                 withTemplate:@"$1"]; 

결과 것은 이것이다 :

두 형식을 테스트하기 위해 08:30과 9:23 AM이있는 텍스트입니다.

$n 대체 문자열에 정규식 패턴 n 번째 포획 기 (괄호)을 의미한다 (n은 숫자 임) -이 경우에는 시간, 결장 및 분.

본인이 언급했듯이 정규 표현식을 사용하면 추가 구문 분석이 필요없이 텍스트에서 직접 대체 할 수 있습니다.

현재로서는이 패턴에는 문자가 없으므로 NSRegularExpressionCaseInsensitive은 필요하지 않습니다.

site은 유용하다. 대체 문자열 및 고급 구문에 대한 설명

+0

당신이 제공 한 훌륭한 대답 ... 이것은 내가 원했던 것입니다 .. 그것은 모든 시나리오를 다루고 있습니다. :-) –

3

는 시간이 경우에, 당신은 dateformatter 사용할 수 있습니다

NSString *string = @"08:30:00AM"; //This is your input time 

NSDateFormatter *df=[NSDateFormatter new]; 
[df setDateFormat:@"hh:mm:ssa"]; 
NSDate *nowTime=[df dateFromString:string];  
[df setDateFormat:@"hh:mma"]; 
NSString *outputTime=[df stringFromDate:nowTime]; 

NSLog(@"time is : %@",outputTime); 

출력 : 오전 8시 반

편집 :

변경 자 네이트 방법 :

당신은 당신의 시간은 당신이 사용할 수있는 08:30:00AM08:30:05AM로 지정된 형식에서 항상 확인하는 경우 :

NSString *string = @"08:30:00AM"; 

NSString *aMPM=[string substringFromIndex:string.length-2]; 
NSString *noSecondAMPM= [string substringToIndex:string.length-5]; 
NSString *myTime=[NSString stringWithFormat: @"%@%@",noSecondAMPM,aMPM]; 

NSLog(@"time is : %@",myTime); 
+0

답변 해 주셔서 감사합니다. 하지만 그것은 문자열이고 UILabel에 표시되어야합니다. 그래서 정규 표현식을 사용하여 문자열을 대체해야합니다. –

+0

정말 정규식이 필요합니까? 당신이 uilabel에 보여줄 수있는'outputTime'의 문자열을 얻었던 편집 된 대답을 보시오. –

+0

내가 그것을 확인하게해라. 이 작품이 아니면 작동하지 않으면 .. –