2014-03-01 2 views
0
input_string = '7:30 p.m. 7:20 p.m.every Mon., any Wed.Thu,fri' 

내부 반복 다른 패턴을 찾는 방법 :이 같은 싶어 문자열

print match.group('day')= mon, wed, thu, fri 
print match.group('starttime')= 7:30 p.m, 7:20 p.m 

을 나는이 시도 :

match = re.search(r'(?P<starttime>([\d]*:[\d]*)(?:[ .apm]*m)?) 
     .*?(?P<day>(?i)(?:mon(?:day)?|tue(?:sday)?|wed(?:nesday)?| 
     thu(?:rsday)?|fri(?:day)?|sat(?:urday)?|sun(?:day)?))' 
      , input_string) 

을하지만 제대로하지 않았다.

는 여러 일치 찾을 후, 시간과 일 부분에 대해 별도의 패턴을 사용 .findall()를 사용해야합니다
+0

'[.apm] *'다음에'm '이 나오는 이유는 무엇입니까? –

+0

아마 여러분의 패턴은 모두 공백없이 하나의 줄에 있습니까? –

+0

am 또는 pm.this는 테스트 문자열입니다. – itzMEonTV

답변

0

:

>>> re.findall(r'(?P<starttime>[\d]*:[\d]*(?:[ .apm]*m)?)', input_string) 
['7:30 p.m', '7:20 p.m'] 
>>> re.findall(r'(?P<day>(?i)(?:mon(?:day)?|tue(?:sday)?|wed(?:nesday)?|thu(?:rsday)?|fri(?:day)?|sat(?:urday)?|sun(?:day)?))', input_string) 
['Mon', 'Wed', 'Thu', 'fri'] 

명명 된 그룹은 다음 정말 중복, 다음은 할 것이다 :

re.findall(r'[\d]*:[\d]*(?:[ .apm]*m)?', input_string) 
re.findall(r'(?i)mon(?:day)?|tue(?:sday)?|wed(?:nesday)?|thu(?:rsday)?|fri(?:day)?|sat(?:urday)?|sun(?:day)?', input_string) 
+0

을 @Martin thanks.but 반복 패턴 그룹을 일치시키는 옵션이 없다는 것을 아는 것이 슬프다. (;) – itzMEonTV

+0

패턴 그룹은 단일 변수와 같습니다. 그것은 목록을 가질 수 없습니다. 따라서 캡쳐 그룹의 고정 목록을 추가하거나 하나의 그룹에 여러 개의 일치 항목이 포함 된 모든 텍스트를 캡처 한 다음 별도의 코드와 일치시킨 후 분리하십시오. 여기서는 가장 간단하고 쉬운 방법 인 여기에서 대답에 대해 수행 한 작업을 수행하십시오. –