2013-05-13 1 views
5

공백 문자 또는 문자열의 끝을 텍스트와 일치 시키려합니다.파이썬 정규식 : 공백 문자 또는 문자열의 끝에 일치

import re 


uname='abc' 
assert re.findall('@%s\s*$' % uname, '@'+uname) 
assert re.findall('@%s\s*$' % uname, '@'+uname+' '+'aa') 
assert not re.findall('@%s\s*$' % uname, '@'+uname+'aa') 

패턴이 올바르지 않습니다.
python을 사용하는 방법?

답변

13

\s*$가 잘못 :이 "0 이상의 공백 문자열의 끝에 다음 "보다는 "하나 또는 그 이상의 공간 또는 문자열의 끝"보다 일치한다.

이 상황에서 나는 (?:\s+|$) (원시 문자열 안의 다른 언급 된대로)을 사용합니다. (?:) 부분은 그 서브 표현식을 분리하는 것입니다. 연산자는 올바른 단편과 일치하고 올바른 단편 만 일치합니다.

+2

작은 수정 :'\ s * $'는 문자열의 끝에 __zero__ 또는 그 이상의 공백을 매치합니다. – stonesam92

+0

고마워, 고침. 나는 언제나 가능하면 +를 사용하여 어떻게 __that__ 오류를 만들 었는지 알 수 있습니다. :) – kampu

0

이 시도 : 당신은 원시 문자열을 사용하지 않는 경우

assert re.findall('@%s\\s*$' % uname, '@'+uname) 

당신은 \ 문자를 이스케이프해야합니다.

약간 혼란 스럽지만, \은 파이썬 인터프리터와 re 모듈의 메타 문자입니다.

+0

죄송 합니다만 – whi

+0

@whi를 두 번째로 통과하지 못했습니다. 두 번째 것은'@abc aa'가 공백의 패턴 뒤에 문자열의 끝과 일치하지 않기 때문에 통과하지 못했습니다. 캄푸의 대답을보십시오. – StoryTeller

0

raw strings을 사용하십시오.

assert re.findall(r'@%s\s*$' % uname, '@'+uname) 

그렇지 않으면 정규 표현식에서 특수 문자 등의 사용과 정기적 인 문자열 충돌에서 특수 문자로 \의 사용.

그러나이 주장은 실패 할 수 없습니다. 물론 "@"외에 변수 uname의 내용과 함께 "@"및 uname의 정규 표현식과 선택적 (항상 비어있는) 공백 및 문자열의 끝과 일치하게됩니다. 동어 반복이다. 네가 뭔가 다른 것을 확인하려고하는 것 같니?

관련 문제