Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬에서 문자열에 문자와 숫자가 각각 하나 이상 포함되어 있는지 확인하는 방법

파이썬에서 문자열에 최소한 하나의 영문자와 하나의 숫자가 포함되어 있는지 확인하는 가장 쉬운 방법은 정규표현식(regular expression)을 사용하는 것입니다. 주어진 문자열이 조건을 만족하는지 검사하려면 re.match(regex, string) 함수를 활용하면 됩니다.

정규표현식을 사용한 예제

import re
print(bool(re.match('^(?=.*[0-9]$)(?=.*[a-zA-Z])', 'hasAlphanum123')))
print(bool(re.match('^(?=.*[0-9])(?=.*[a-zA-Z]$)', 'some string')))

실행 결과

True
False

위 코드에서 사용된 ?= 구문은 정규표현식의 룩어헤드(lookahead)를 호출하는 문법입니다. 룩어헤드는 현재 위치에서 문자열의 앞부분을 미리 살펴보면서 지정된 패턴과 일치하는 부분이 존재하는지 확인하는 기능입니다. 즉, 첫 번째 패턴은 문자열 끝에 숫자가 있으면서 그 앞 어딘가에 영문자가 존재하는지를, 두 번째 패턴은 숫자가 존재하고 마지막에 영문자가 오는지를 검사합니다.

만약 더 일반적인 조건 검사가 필요하다면 다음과 같은 패턴도 사용할 수 있습니다.

import re
pattern = r'^(?=.*[a-zA-Z])(?=.*\d).+'
print(bool(re.match(pattern, 'hasAlphanum123')))  # True
print(bool(re.match(pattern, '12345')))           # False

이 패턴은 문자열 전체에 걸쳐 영문자와 숫자가 각각 하나 이상 존재하기만 하면 위치에 상관없이 True를 반환합니다.

for 반복문과 플래그 변수를 사용한 방법

정규표현식 없이도 간단한 for 반복문과 두 개의 불리언 플래그 변수를 사용해 동일한 조건을 검사할 수 있습니다.

def validate_string(s):
    letter_flag = False
    number_flag = False
    for i in s:
        if i.isalpha():
            letter_flag = True
        if i.isdigit():
            number_flag = True
    return letter_flag and number_flag

print(validate_string('hasAlphanum23'))
print(validate_string('some string'))

실행 결과

True
False

이 방식은 문자열의 각 문자를 순회하면서 isalpha() 메서드로 문자인지, isdigit() 메서드로 숫자인지를 판별하고, 두 조건이 모두 충족되었을 때 True를 반환합니다. 코드의 의도가 직관적으로 드러나기 때문에 초보자에게는 오히려 정규표현식보다 이해하기 쉬운 장점이 있습니다.

정리

  • 정규표현식 방식: 코드가 간결하지만 룩어헤드 문법에 대한 이해가 필요합니다.
  • 반복문 방식: 가독성이 좋고 로직을 쉽게 확장할 수 있습니다(예: 특수문자 요구 추가 등).

상황에 맞게 두 방법 중 편한 방식을 선택해 사용하시면 됩니다.