2017-11-05 2 views
-1

단어의 길이가 충분한 지 확인하고 문자열 끝에 ()[email protected]#$%^&*.,' 기호가 포함되어 있는지 확인하고 싶습니다. 조건은 다음입니다 :문자열의 기호 확인에 끼어 들었음

  • 단어는 기호없이 3 자 이상이어야합니다.

    def check_word(word: str) -> bool: 
         m = re.match("[^()[email protected]#$%^&*.,]{4,}[()[email protected]#‌​$‌​%^&*.,]*", word) 
         if m is not None: 
         return True 
         return False 
        print(check_word("Hell,oo")) # False 
        print(check_word("Hello,!")) # True 
        print(check_word('Hello"')) # False 
    

    그래서 제 질문은 내가 이유는 다음과 같습니다 - 기호 ''

시작시 특수 기호와 문자열의 중간 를 포함해서는 안 문자로

  • 올바른 단어를 계산 나는 정규식을 사용하기로 결정 re.match에있는 경우 문자 앞에 문자가 없어야한다고 지적했습니다. Trueprint(check_word("Hell,oo")에 있습니다. 그리고 '"'이 목록에 없더라도 print(check_word('Hello"'))True 인 이유는 무엇입니까?

  • +0

    '^ [!?. (^) \ D _ @ # $으로의 %^& *를,'] {3,} [match()와 함축되어 있기 때문에 [,)^d.? @ # $ %^& *., '] * $' – sln

    답변

    2

    문자열의 시작과 끝을 나타내려면 ^$을 추가해야합니다. ^은 설명에 표시된대로 match()과 함축되어 있으므로 $ 만 지정하면됩니다. 다음은 예입니다

    re.match(r'[^()[email protected]#‌​$‌​%^&*.,]{4,}[()[email protected]#‌​$‌​%^&*.,]*$', 'Hell,oo') 
    

    하지만 문자열이 문자를 포함을 필요로하기 때문에, 당신은 + 일치 한 문자 이상 동안, +를 사용하는 대신 ** 이후 경기의 문자 이상을 제로한다. 또는 {4,}처럼 지정한 번호로 *을 바꾸십시오.

    그리고 당신의 질문에 대한

    :

    print(check_word('Hello"'))True 경우 기호 '"'조차 목록에?

    [^()[email protected]#‌​$‌​%^&*.,]입니다. 이 세트의 이 아닌 인 모든 문자와 일치하며 "은 해당 문자가 아닙니다. 그것을 해결하기 위해, 당신은 어떤 알파벳 영어 문자와 일치 대신 [a-zA-Z] 사용할 수 있습니다

    re.match(r'[a-zA-Z]{4,}[()[email protected]#‌​$‌​%^&*.,]*$', 'Hell,oo') 
    
    +2

    아닙니다. –

    +1

    또한,'\ w'에는 숫자와 밑줄이 포함됩니다. –

    +0

    감사합니다. 그에 따라 편집 됨. – ammarx