2012-07-16 2 views
2

이것은정규 표현식, 공간

def matcher(ex): 
    if re.match(r'^[\w|\d][A-Za-z0-9_-]+$', ex): 
     print 'yes' 

내 목표는

  1. 은 문자로 시작하는 모든 다음을 만족하는 경우에만 제출에 맞게 내 시도 또는 숫자 숫자
  2. 문자, 공백, 대시, 밑줄 및 숫자 숫자 만 허용됩니다.
  3. 모든 끝 문자 공백이 제거됩니다.

내 정규 표현식에서 matcher('__')은 유효한 것으로 간주됩니다. 내가 원하는 것을 얻기 위해 어떻게 수정할 수 있습니까? 나는 \w도 밑줄을 포함한다고 생각한다. 그러나 matcher('_') 원래 정규식에

+0

'\ w'는'[0-9A-Za-z_]'이고 정규 표현식은 적어도 2 문자를 표시합니다. – nhahtdh

+0

@nhahtdh 아 ... 나는 그것을 몰랐다. 감사. – user1012451

답변

8
def matcher(ex): 
    ex = ex.rstrip() 
    if re.match(r'^[a-zA-Z0-9][ A-Za-z0-9_-]*$', ex): 
     print 'yes' 

문제 ... 일치하지 않습니다 :

  1. |

    는 문자 클래스에서 교대를 의미하지 않는다, 그것은 문자 그대로 파이프 문자를 의미한다.

  2. 하나 이상의 문자를 의미하는 +을 사용 했으므로 '_'과 같은 한 문자 문자열이 일치하지 않습니다.

  3. 첫 문자에 \w을 사용했으며 밑줄을 허용했습니다.

+0

... 두 번째 절에 공백이 필요합니다. –

+0

공간을 추가했습니다. 감사합니다. –

+0

또한 공백을 없애려면 정규식 대신'mystring.rstrip()'을 사용하십시오. –