Python은 문자열이 숫자인지 알파벳인지 확인하고 확인합니다.

사업

Python은 문자열 유형이 숫자인지 알파벳인지 확인하고 확인하는 여러 문자열 메서드를 제공합니다.

각 방법은 샘플 코드로 설명됩니다.

  • 문자열이 10진수인지 여부를 결정합니다.:str.isdecimal()
  • 문자열이 숫자인지 확인:str.isdigit()
  • 문자열이 숫자를 나타내는 문자인지 확인:str.isnumeric()
  • 문자열이 알파벳인지 확인:str.isalpha()
  • 문자열이 영숫자인지 확인:str.isalnum()
  • 문자열이 ASCII 문자인지 여부를 결정합니다.:str.isascii()
  • 빈 문자열의 판단
  • 문자열을 숫자로 변환할 수 있는지 확인

isascii() 이외의 메서드의 경우 빈 문자열, 다음 기호 등이 포함된 문자열은 거짓입니다.

  • ,
  • .
  • -

-1.23 등은 이 섹션의 끝에 숫자 값으로 설명됩니다.

정규식은 문자 유형을 보다 유연하게 결정하고 관련 문자 유형을 추출하는 데 사용할 수 있습니다.

다음을 결정하는 방법에 대한 자세한 내용은 다음 문서를 참조하십시오.

  • 숫자 문자열(str)을 숫자(int, float)로 변환하는 방법
  • 대문자와 소문자를 구분하는 방법

문자열이 10진수인지 여부를 결정합니다.:str.isdecimal()

isdecimal()에서 모든 문자가 10진수, 즉 유니코드의 일반 범주 Nd에 있는 문자이면 참입니다. 전각 아라비아 숫자 등에 대해서도 마찬가지입니다.

s = '1234567890'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 1234567890
# isdecimal: True
# isdigit: True
# isnumeric: True

s = '1234567890'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 1234567890
# isdecimal: True
# isdigit: True
# isnumeric: True

빼기 기호나 마침표와 같은 기호가 포함되어 있으면 false입니다. 예를 들어 ‘-1.23’과 같은 문자열이 숫자 값인지 확인하려면 예외 처리를 사용할 수 있습니다. 이것은 이 섹션의 끝에 설명되어 있습니다.

s = '-1.23'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = -1.23
# isdecimal: False
# isdigit: False
# isnumeric: False

문자열이 숫자인지 확인:str.isdigit()

isdigit()에서는 isdecimal()에서 참인 숫자 외에 유니코드 속성 값 Numeric_Type이 Digit 또는 Decimal인 숫자도 참입니다.

예를 들어 정사각형을 나타내는 위첨자 숫자는 isdecimal()에서는 false이지만 isdigit()에서는 true입니다.

  • 정사각형을 나타내는 위 첨자 숫자
    • ²
    • \u00B2}’
s = '10\u00B2'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 10²
# isdecimal: False
# isdigit: True
# isnumeric: True

문자열이 숫자를 나타내는 문자인지 확인:str.isnumeric()

isnumeric()에서는 isdigit()에서 참인 숫자 외에 유니코드 속성 값 Numeric_Type이 Numeric인 숫자도 참입니다.

분수, 로마 숫자 및 중국어 숫자도 사실입니다.

s = '\u00BD'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = ½
# isdecimal: False
# isdigit: False
# isnumeric: True

s = '\u2166'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = Ⅶ
# isdecimal: False
# isdigit: False
# isnumeric: True

s = '一二三四五六七八九〇'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 一二三四五六七八九〇
# isdecimal: False
# isdigit: False
# isnumeric: True

s = '壱億参阡萬'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 壱億参阡萬
# isdecimal: False
# isdigit: False
# isnumeric: True

문자열이 알파벳인지 확인:str.isalpha()

isalpha()에서 다음 중 하나가 있는 유니코드 일반 범주 속성은 true입니다.

  • Lm
  • Lt
  • Lu
  • Ll
  • Lo

알파벳, 한자 등은 사실입니다.

s = 'abc'
print('s =', s)
print('isalpha:', s.isalpha())
# s = abc
# isalpha: True

s = '漢字'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 漢字
# isalpha: True

아라비아 숫자는 거짓이지만 중국어 숫자도 한자이기 때문에 참입니다. 그러나 중국어 숫자의 0은 거짓입니다.

s = '1234567890'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 1234567890
# isalpha: False

s = '1234567890'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 1234567890
# isalpha: False

s = '一二三四五六七八九'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 一二三四五六七八九
# isalpha: True

s = '壱億参阡萬'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 壱億参阡萬
# isalpha: True

s = '〇'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 〇
# isalpha: False

로마 숫자는 거짓입니다.

s = '\u2166'
print('s =', s)
print('isalpha:', s.isalpha())
# s = Ⅶ
# isalpha: False

문자열이 영숫자인지 확인:str.isalnum()

isalnum()에서 지금까지 나열된 다음 메서드 중 하나에서 각 문자가 true이면 true입니다.

  • isdecimal()
  • isdigit()
  • isnumeric()
  • isalpha()

각 문자는 개별적으로 평가되므로 문자와 숫자가 포함된 문자열은 다른 모든 메서드에서 false인 경우에도 isalnum()에서 true가 됩니다.

s = 'abc123'
print('s =', s)
print('isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = abc123
# isalnum: True
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False

문자열이 ASCII 문자인지 여부를 결정합니다.:str.isascii()

Python 3.7에는 isascii()가 추가되었습니다. 문자열의 모든 문자가 ASCII 문자이면 true를 반환합니다.

숫자와 문자 외에도 + 및 -와 같은 기호도 true입니다.

s = 'abc123+-,.&'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False

ASCII가 아닌 히라가나 및 기타 문자는 false입니다.

s = 'あいうえお'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True

다음에 보게 되겠지만, 다른 메서드와 달리 isascii()는 빈 문자열에 대해서도 true를 반환합니다.

빈 문자열의 판단

빈 문자열은 isascii()의 경우 true이고 다른 메서드의 경우 false입니다.

s = ''
print('s =', s)
print('isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
print('isascii:', s.isascii())
# s = 
# isalnum: False
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False
# isascii: True

bool()을 사용하여 빈 문자열인지 확인합니다. 반환 값은 빈 문자열에 대해 false이고 그렇지 않으면 true입니다.

print(bool(''))
# False

print(bool('abc123'))
# True

문자열을 숫자로 변환할 수 있는지 확인

음수 또는 소수 값 문자열에는 마침표 또는 빼기 기호가 포함됩니다. 따라서 isascii()를 제외한 모든 메서드의 결과는 false입니다.

isascii()의 경우 true이지만 다른 기호나 알파벳 문자가 포함된 경우에도 true이므로 문자열을 숫자 값으로 변환할 수 있는지 여부를 판별하는 데 적합하지 않습니다.

s = '-1.23'
print('s =', s)
print('isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
print('isascii:', s.isascii())
# s = -1.23
# isalnum: False
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False
# isascii: True

문자열은 float()를 사용하여 부동 소수점 숫자로 변환할 수 있습니다. 변환할 수 없는 문자열에 대한 오류입니다.

print(float('-1.23'))
# -1.23

print(type(float('-1.23')))
# <class 'float'>

# print(float('abc'))
# ValueError: could not convert string to float: 'abc'

예외 처리를 사용하면 float()로 문자열을 변환할 수 있을 때 true를 반환하는 함수를 정의할 수 있습니다.

def is_num(s):
    try:
        float(s)
    except ValueError:
        return False
    else:
        return True

print(is_num('123'))
# True

print(is_num('-1.23'))
# True

print(is_num('+1.23e10'))
# True

print(is_num('abc'))
# False

print(is_num('10,000,000'))
# False

쉼표로 구분된 숫자도 true인지 확인하려면 replace()를 사용하여 쉼표를 제거합니다(빈 문자열로 교체).

def is_num_delimiter(s):
    try:
        float(s.replace(',', ''))
    except ValueError:
        return False
    else:
        return True

print(is_num_delimiter('10,000,000'))
# True

공백 구분을 지원하려면 replace()를 추가로 사용할 수 있습니다.

def is_num_delimiter2(s):
    try:
        float(s.replace(',', '').replace(' ', ''))
    except ValueError:
        return False
    else:
        return True

print(is_num_delimiter2('10,000,000'))
# True

print(is_num_delimiter2('10 000 000'))
# True