2017-01-31 11 views
0

나는 Pattern이라는 클래스를 가지고 있고 그 안에 두 개의 메소드, equates와 setwildcard가있다. 동일시는 문자열이 첫번째 문자열에 나타나는 인덱스를 반환하고, setwildcard는 문자열에 와일드 카드 문자를 설정파이썬에서 와일드 카드 매칭

그래서

p = Pattern('xyz') 
t = 'xxxxxyz' 
p.equates(t) 

반환합니다 또한 4

p = Pattern('x*z', '*') 
t = 'xxxxxgzx' 
p.equates(t) 

*는 와일드 카드이고 x와 z가 일치하는 한 t 내의 모든 문자와 일치 할 수 있기 때문에 4를 반환합니다. 이것을 구현하는 가장 좋은 방법은 무엇입니까?

+1

StackOverflow에 오신 것을 환영합니다. 도움말 설명서의 게시 지침을 읽고 따르십시오. [주제] (http://stackoverflow.com/help/on-topic) 및 [묻는 방법] (http://stackoverflow.com/help/how-to-ask) 여기를 참조하십시오. 일반적으로 이러한 문제를 해결하는 "올바른"방법은 * some * 솔루션을 구현 한 다음 CodeReview.StackExchange.com에 대한 개선을 요청하는 것입니다. – Prune

답변

0

본질적으로 정규 표현식의 하위 집합을 구현하는 것처럼 보입니다. 운 좋게도 파이썬에는 내장 된 라이브러리가 있습니다! 정규 표현식 (또는 친구가 정규 표현식이라고 부르는대로)이 작동하는 방식에 익숙하지 않은 경우 documentation for them을 읽는 것이 좋습니다.

어쨌든 re.search 기능은 사용자가 찾고있는 것입니다. 첫 번째 인수로 일치시킬 패턴과 두 번째 인수로 일치하는 문자열을 취합니다. 패턴이 일치하면 searchSRE_Match 객체를 반환합니다.이 객체는 편리하게는 #start() 메서드를 반환합니다. 경기가 시작되는 색인. -하지 * - 당신은 당신이 사용하고있는 패턴으로 교체해야합니다 그래서 와일드 카드이며, ., 정규 표현식에에

import re 
start_index = re.search(r'x.z', 'xxxxxgzg').start() 

참고 :

은 예로부터 데이터를 사용하려면 .