2016-09-07 2 views
0

아래 정규식을 사용하는 정규식을 얻으려고 애 쓰고 있습니다.정규식 형식의 정규식 (HHh MMs SSs)

위의 예는 긴 문자열의 일부입니다 : 포인터는

(43m 12s) 
(13m 11s) 
(11h 43m 12s) 
(1h 43m 12s) 

편집을 appeciated.

Edit2가이 :

\s\(\s\d{1,2}[a-z]\s.*\) 

답변

1

,이 작동합니다 \(\s?(?:\d{1,2}\w)+\s?\) 여기에 작업을 볼 수 있습니다 https://regex101.com/r/yC8iH6/1

[편집]을 : 필요한 경우 캡처 추가 당신은 이것을 할 수있는 캡처해야합니다 : \(\s?(?:(\d{1,2})\w\s?)?(?:(\d{1,2})\w\s?)(?:(\d{1,2})\w\s?)\s?\). 첫 번째 그룹은 선택 사항입니다.

이 작업 버전은 https://regex101.com/r/yC8iH6/2입니다.

또한 첫 번째 비 캡처 정규 표현식은 다음과 같이 더 정확하게 표현할 수 있습니다. \(\s?(?:\d{1,2}\w){2,3}\s?\).

희망이 도움이됩니다.

2

당신은 반드시 정규 표현식으로 접근 할 필요가 없습니다 :

이것은 내가 지금 가지고있는 것입니다.

는 여기에 또 다른 옵션는 - dateutil 날짜 파서 사용

>>> from dateutil.parser import parse 
>>> l = ["43m 12s", "13m 11s", "11h 43m 12s", "1h 43m 12s"] 
>>> for item in l: 
...  dt = parse(item) 
...  print(item, dt.hour, dt.minute, dt.second) 
... 
('43m 12s', 0, 43, 12) 
('13m 11s', 0, 13, 11) 
('11h 43m 12s', 11, 43, 12) 
('1h 43m 12s', 1, 43, 12) 

또는 실패하면, 당신은 %Mm %Ss 형식을 시도, %Hh %Mm %Ss을 시도 time.strptime()를 사용할 수 있습니다.

경우 : 당신은 시간 분, 초를 캡처 할 필요가없는 경우