문제

나는하고 싶다 확인 그리고 발췌 그만큼 문자열에서 몇 시간과 몇 분 .NET에서 Regex 사용. 분리 된 두 숫자를 회복시키기 위해 :. 허용 형식h:m 또는 m. 받아 들여지지 않습니다 :m, h:.

편집하다:이것은 수의 수입니다 시간 23까지 오버플로 할 수 있습니다 ... 32.

몇 시간 (32 개 이상)과 분 (59 세 이상)의 오버플로 나는 값을 회복 한 후 (int.parse) 할 것입니다.


* 재미로 어쩌면 시간 동안> 32를, 1 분 동안> 59 ( 그것은 수 [0-5]*[0-9], 몇 시간 동안 모르겠다)?

도움이 되었습니까?

해결책 4

마지막으로, 유효성 검사 (32까지) 및 값을 얻는 코드는 (vb.net 버전)입니다.

Dim regexHour As New Regex( _ 
   "((?<hours>([012]?\d)|(3[01]))\:)?(?<minutes>[0-5]?\d)", _
    RegexOptions.ExplicitCapture)
Dim matches As MatchCollection = regexHour.Matches(value)

If matches.Count = 1 Then
  With matches(0)
    ' (!) The first group is always the expression itself. '
    If .Groups.Count = 3 Then ' hours : minutes '
      strHours = .Groups("hours").Value
      If String.IsNullOrEmpty(strHours) Then strHours = "0"
      strMinutes = .Groups("minutes").Value
    Else ' there are 1, 3 or > 3 groups '
      success = False
    End If
  End With
Else
  success = False
End If

이 답변에 기여하는 모든 분들께 감사드립니다!

다른 팁

당신은 Regex에 죽었습니까? 왜냐하면 DateTime.Parse 여기에서 훨씬 단순하고 강력 할 것입니다.

 DateTime dt = DateTime.Parse("12:30 AM");

그런 다음 DT는 시간에 대해 알아야 할 모든 것을 제공합니다. DateTime.TryParse() 시간 문자열이라고 확신 할 수없는 경우 더 나을 수 있습니다.

(?:(\d\d?):)?([0-5][0-9])

시간을 확인하려면 :

(?:([01]?[0-9]|2[0-3]):)?([0-5][0-9])

편집하다: 테스트 및 수정.


그러나이 작업을 수행하는 가장 좋은 방법은 DateTime.ParseExact, 이렇게 : (테스트)

TimeSpan time = DateTime.ParseExact(
    input, 
    new string[] { "HH:mm", "H:mm", "mm", "%m" }, //The % is necessary to prevent it from being interpreted as a single-character standard format.
    CultureInfo.InvariantCulture, DateTimeStyles.None
).TimeOfDay;

검증을 위해 사용할 수 있습니다 tryparseexact.

여기에 Regex 문자열이 있습니다. 명명 된 캡처 그룹 "시간"및 "분"에 액세스 할 수 있습니다. "ExplicitCapture"및 "Singleline"플래그를 사용하십시오.

@"^(?u003Chours> [0-9] {1,2}) :)? (?u003Cminutes> [0-9] {1,2}) $ "

여기에서 regexes를 테스트 할 수 있습니다. http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

언급 한 바와 같이,이 양식 만 허용되는지 확인하지 않으면 DateTime 구문 분석이 더 나을 수 있습니다.

또한 음수 값은 허용되지 않으며 소수성도 허용되지 않습니다. (그러나 필요한 경우 REGEX를 포함하도록 변경 될 수 있습니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top