문제

날짜와 시간 ( "21.01.08 10.00")과 스트링에서 시간 (10.00)을 일치시키고 싶습니다. 다음과 같은 정규 표현을 사용하고 있습니다.

new RegExp("\\b[0-9]{1,2}\\.[0-9]{1,2}\\b" "g");

그러나 이것은 21.01.08 및 10.00에서 21.01과 일치합니다.

PCRE를 Regualar Expression Engine으로 사용하고 있습니다.

업데이트:

죄송합니다. 더 명확했을 것입니다. 데이터와 시간은 더 큰 문자열의 일부입니다. 그 끈에서 시간을 추출하고 싶습니다.

예를 들어:

"10.00에서 21.01.08에서 파티는 도서관에서 열립니다" "21.08.08- 10:00 파티가있을 것입니다." 10.00 "에서 시작

이게 가능해?

도움이 되었습니까?

해결책

당신의 원래 Regex는 작동하지 않았습니다 \b (단어 경계) "." "21.01.08" 경계를보다 강력하게 코딩해야합니다.

(?:[^\d:.]|^)(\d\d?[.:]\d\d)(?![.:\d])

이것은 날짜를 제외하면서 사용한 표기법 중 하나에서 시간을 캡처합니다. 시간을 검증하지는 않습니다. 예를 들어, 시간을 검증하는 "88:99"는 가능하지만 패턴을 크게 복잡하게하고 대부분의 상황에서는 과잉 일 수 있습니다.

캡처되지 않은 그룹화 대신 룩 하인드를 사용하는 것이 좋지만 PCRE는 가변 폭 룩-비만을 지원하지 않습니다.

다른 팁

^\d{2}\.\d{2}\.\d{2}\s(\d{2}\.\d{2})$

시간 부분이 캡처 그룹에 넣어야하는 트릭을 수행해야합니다.

"새로운 regexp"나는 확실하지 않습니다 (Java 아마도?). Perl에서 당신은 같은 가치를 얻을 수 있습니다 ...

if ("21.01.08 10.00" =~ m/^\d{2}\.\d{2}\.\d{2}\s(\d{2}\.\d{2})$/g) {
  $time_part = $1;
}

.NET에서 다음은 작동해야합니다 ...

  Regex r = new Regex(@"^\d{2}\.\d{2}\.\d{2}\s(\d{2}\.\d{2})$");
  string dateTimeString = "21.01.08 10.00";
  if (r.IsMatch(dateTimeString)) {
    string timePart = r.Match(dateTimeString).Groups[1].Value;
    Console.Write(timePart);
  }
  Console.ReadKey();

당신은 또한 사용할 수 있습니다 캡처 명명 덜 모호한 것을 사용하려면 캡처 그룹에 대한 색인을 사용하려면 인덱스가 있습니다.

사용해보십시오

new RegExp("\\b[0-9]{1,2}\\.[0-9]{1,2}$" "g");

$는 문자열의 끝을 나타냅니다

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