2011-02-14 7 views
20

정규식을 사용하여 문자열을 분할하려고합니다.Python split string on regex

>>> import re 
>>> p = re.compile(r'(Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)\s*\d{1,2}') 
>>> filter(None, p.split('Friday 1Friday 11 JAN 11')) 
['Friday', 'Friday', ' JAN 11'] 

내 정규식 잘못 뭐하는 거지 :

Friday 1Friday 11 JAN 11 

내가 달성하고자하는 출력은

['Friday 1', 'Friday 11', ' JAN 11'] 

내 조각은 지금까지 원하는 결과를 생산 그렇지?

답변

23

문제는 캡처 괄호입니다. 이 구문은 (?:...)이므로 캡처되지 않습니다. 시도 :

p = re.compile(r'((?:Friday|Saturday)\s*\d{1,2})') 
+0

정확히 내가 한 것입니다. 나는 그것이 작은 무엇인가 알고 있었다. 감사합니다. –

+0

나는 p = re.compile (r '((금요일) 토요일) \ s * \ d {1,2})'과 가까워지고 있었지만 왜 각 그룹에 대해 2 개의 결과를 얻었는지 이해하지 못했습니다. 이제는 완전한 이해가되지만, 결과 + 그룹 이름을 다시 참조하고 있습니다. –

0
p = re.compile(r'(Friday\s\d+|Saturday)') 
5

're.findall'기능을 사용할 수도 있습니다.

\>>> val 
'Friday 1Friday 11 JAN 11 ' 
\>>> pat = re.compile(r'(\w+\s*\d*)') 
\>>> m=re.findall(pat,val) 
\>>> m 
['Friday 1', 'Friday 11', 'JAN 11']