2014-11-23 2 views
0

파이썬 일치 조건부 정규 표현식이 일치합니다 :파이썬 - unexpectingly 싶습니다 문자열과 일치하지 않는

다음 함수는 특정 이름의 형식이 하위 디렉토리에 대한 디렉토리를 검색합니다. 일치하면 인쇄합니다. 정규식이 정확하고, 내가 확인했습니다 : DEMO.

여전히 조건부 블록은 아무 것도 출력하지 않지만 이전에 인쇄 명령을 내 보낸 동안 찾고있는 디렉토리가 존재합니다. 일치해야하지만 그렇지 않습니다.

def getRelevantFolders(): 
    pattern = re.compile('(e|d|b)-(heme|gome|jome)-(?!.*?\/)(.+)') 
    for root, dirs, files in os.walk('/jome'): 
     print root # f.e.: /jome/stat/d-heme-sdfsdf 
     if pattern.match(root): 
      print ('Matched: ' + root) 

어디서 실수입니까?

답변

1

match은 항상 문자열 시작 부분과 일치하기 때문에 match 대신 search을 사용하십시오. 당신이 문자열 어디서나 일치를 찾으려면

, search()를 사용

pattern.search(root) 

파이썬 위키에서 :

def getRelevantFolders(): 
    pattern = re.compile('[edb]-(heme|gome|jome)-([^/]+)') 
    for root, dirs, files in os.walk('/jome'): 
     print root # f.e.: /jome/stat/d-heme-sdfsdf 
     if pattern.search(root): 
      print 'Matched: ' + root 
2

는 대신 re.match()re.match 때문에이 선두에서 패턴과 일치하는 re.search를 사용할 필요가 대신 (search() vs. match() 참조). 만 문자열의 시작 부분에 일치 re.match() 검사하는 동안 어디 문자열에서 일치 re.search() 검사 (이 펄 기본적으로 무엇이다) :

파이썬은 정규 표현식에 따라 두 가지 기본 작업을 제공합니다.

+0

설명해 주셔서 감사합니다. – royskatt

+0

@royskatt 환영합니다! – Kasramvd

관련 문제