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