2012-02-04 4 views
6

는 다음 문자열을 감안할 때 :파이썬 정규식 일치하는 문자 별표

s = 'abcdefg*' 

어떻게 그것을 않거나 별표 (*)로 끝나는 소문자와 선택적으로 만들어진 다른 문자열과 일치 할 수 있습니까? 다음과 같이 작동 할 것이라고 생각했지만 그렇지 않습니다.

re.match(r"^[a-z]\*+$", s) 

일치 항목이 아니며 None을 제공합니다.

re.match(r"^[a-z]+\*?$", s) 

답변

13

소문자로만 구성되고 별표로 끝나는 다른 문자열을 어떻게 찾을 수 있습니까?

다음은 그것을 할 것입니다 :

re.match(r"^[a-z]+[*]?$", s) 
  1. ^은 문자열의 시작과 일치합니다.
  2. [a-z]+은 하나 이상의 소문자와 일치합니다.
  3. [*]?은 0 개 또는 하나의 별표와 일치합니다.
  4. $은 문자열의 끝과 일치합니다.

원본 정규 표현식은 정확히 하나의 소문자와 하나 이상의 별표가 일치합니다.

4

\*?는 0 또는 1 별표 수단 하나의 별표 (이스케이프 된 별표 뒤에 오는 물음표)

귀하의 정규식은 "정확히 하나의 별표가 붙은 하나의 소문자"를 의미합니다 ..

1

이 제로 이상의 소문자 (따라서 제 별표)로 구성된 스트링 0 또는 뒤에 "수단

re.match(r"^[a-z]*\*?$", s) 

보십시오

0

당신은 그 중 하나 이상을 원한다는 것을 나타 내기 위해 [a-z] 일치 뒤에 +를 잊었습니다 (지금은 하나만 일치합니다). [a-z]+

re.match(r"^[a-z]+\*+$", s) 
2
re.match(r"^[a-z]+\*?$", s) 

소문자의 순서와 일치하고, \*?는 옵션 문자 * chatacter 일치합니다.

관련 문제