2014-05-25 2 views
2

정규식을 배우는 것이 어려워지고 있습니다. 다음 Python 정규식 코드 스 니펫을 참조하십시오.이 정규식 패턴이 문자열의 추가 문자와도 일치하는 이유는 무엇입니까?

>>> import re 
>>> str = "demo" 
>>> re.search("d?mo",str) 
<_sre.SRE_Match object at 0x00B65330> 

위 예제에서 일치하는 개체를 반환하는 이유는 무엇입니까?

나는 알고있다, 기호 '?' 그것은

상기 예에서

,

1.'d' is matched with 'd' 
2.'m' is matched with 'm' 
3.'o' is matched with 'o' 

그러나되는 문자 "E"와 일치되어 앞 문자 0 또는 1 반복 일치하지만 의미? 내 이해에 따르면 'dmo'또는 'mo'만 주어진 패턴과 일치해야하지만 왜 '데모'인지는 알 수 없습니다.

'dmo'또는 'mo'만 일치 시키려면 올바른 패턴은 무엇입니까?

+0

내장 된 [str 함수] (https://docs.python.org/2/library/functions.html#str)를 마스크하기 때문에 변수 이름을'str'으로 지정하지 마십시오 – dawg

답변

1

re.match 대신 re.search을 사용하고 있기 때문입니다. 당신이 전체 문자열과 일치 할 경우, 당신이해야 할 :

re.match("d?mo$",str) 

을 다른 방법으로도 수행 할 수 있습니다

re.search("^d?mo$",str) 

+0

일치 및 검색 방법의 차이점을 알고 있습니까? –

+1

@RajeshKumar,'match'는 문자열의 처음부터 검색합니다. – sshashank124

+0

'e'문자가 일치합니까? –

2

re.search('R', str) 효과적으로과 동일 유사한 효과를 달성하기 위해 정규 표현식의 경우 re.match('.*R', str)R.

그래서 당신은 (효과 ... 줄 바꿈 무시)이

re.match(".*d?mo", "demo") 

.* 일치 "de"d? 일치 ""mo 일치 "mo".


당신은 캡처 그룹과이를 확인할 수 있습니다 :

re.search("(d?mo)", "demo").group(0) 
#>>> 'mo' 

d? 일치 아무것도, 그것은 선택 사항입니다한다.

관련 문제