2010-05-09 2 views
1

, 나는 정규 표현식을 만든 : 권장파이썬과 루블러 사이의 정규 표현식의 차이점은 무엇입니까? Rubular 나에서

: 컴퓨터와 예술의 일부 좋은 안락 수준

(Prerequisite|Recommended): (\w|-|)* 

그것은 굵게 일치합니다.

여름. 2 학점. 선행 조건 : 신입생 서 또는 강사의 허락을 받으십시오. 공학 학위를 받기 위해 신용이 적용되지 않을 수 있습니다. . S-U 성적 만.

note_re = re.compile(r'(Prerequisite|Recommended): (\w|-|)*', re.IGNORECASE) 

def prereqs_of_note(note): 
    match = note_re.match(note) 
    if not match: 
     return None 
    return match.group(0) 

불행하게도, 코드 대신 경기 None을 반환합니다 :

>>> import prereqs 

>>> result = prereqs.prereqs_of_note("Summer. 2 credits. Prerequisite: pre-fres 
hman standing or permission of instructor. Credit may not be applied toward engi 
neering degree. S-U grades only.") 

>>> print result 
None 

내가 잘못 여기서 뭐하는 거지 여기

파이썬에서 정규 표현식의 사용이다?

업데이트 :re.match() 대신 re.search()이 필요합니까?

+2

http://pythex.org/는 파이썬의 엔진을 사용해도 정규 표현식이 해당 문자열과 일치하므로 정규식 (파이썬을 모른다)을 어떻게 사용하고 있는지 문제가 있다는 것을 알고 있습니다. – Gareth

+1

또한 개인적으로는 regex를'(Prerequisite | Recommended) : ([\ w -] *)'로 업데이트하면 나머지 일치를보다 잘 포착 할 수 있습니다. (http://rubular.com/r/5v7u66vc1M 참조) – Gareth

답변

2

문자열을 검색하므로 re.search()을 사용하려고합니다. re.match()은 문자열 시작 부분에 패턴을 적용하려고하기 때문에 원하지 않습니다.

>>> import re 
>>> s = """Summer. 2 credits. Prerequisite: pre-freshman standing or permission of instructor. Credit may not be applied toward engineering degree. S-U grades only.""" 
>>> note_re = re.compile(r'(Prerequisite|Recommended): ([\w -]*)', re.IGNORECASE) 
>>> note_re.search(s).groups() 
('Prerequisite', 'pre-freshman standing or permission of instructor') 

또한 "instructor"단어 다음 첫 번째 마침표와 일치 시키려면 리터럴 '.'을 추가해야합니다. 당신의 패턴으로 :

>>> re.search(r'(Prerequisite|Recommended): ([\w -\.]*)', s, re.IGNORECASE).groups() 
('Prerequisite', 'pre-freshman standing or permission of instructor. Credit may not be applied toward engineering degree. S-U grades only.') 

그게 당신이 원하는 무엇을 정말하지 않는 한 당신이 할 것처럼 보이더라도 당신은, 행의 나머지에 당신의 패턴은 탐욕과 일치하게 건의 할 것입니다.

>>> re.search(r'(Prerequisite|Recommended): (.*)', s, re.IGNORECASE).groups() 
('Prerequisite', 'pre-freshman standing or permission of instructor. Credit may not be applied toward engineering degree. S-U grades only.') 

리터의 첨가 이전의 패턴은 '.'이, 예를 들어 동일한 .*를 반환한다.

+1

... 아니면 첫 번째 마침표까지만 일치하는'(. *? \.)'. –

관련 문제