Python

[Python] 문자열 관련 함수 -2-

HeoN97 2023. 5. 24. 19:15

  문자열 확인

    1) isalpha

        - "문자열" . isalpha()

        - 문자열이 모두 문자(영어 or 한글)이면 True, 아니면 False를 반환합니다.

a = 'abc'
b = '가나다'
c = '123'

print(a.isalpha())	# True
print(b.isalpha())	# True
print(c.isalpha())	# False

 

    2) isalnum

        - "문자열" . isalnum()

        - 문자열이 영어,숫자,한글로 이루어져 있으면 True, 아니면 False를 반환합니다.

a = "ABC"
b = "123"
c = "A1@D"
d = "A1 2D"

print(a.isalnum())	# True
print(b.isalnum())	# True
print(c.isalnum())	# False
print(d.isalnum())	# False

 

    3) isdigit

        - "문자열" . isdigit()

        - 문자열이 모두 숫자이면 True, 아니면 False를 반환합니다.

a = 'abc'
b = '가나다'
c = '123'

print(a.isdigit())	# False
print(b.isdigit())	# False
print(c.isdigit())	# True

 

    4) isdecimal

        - "문자열" . isdecimal()

        - 문자열이 0~9사이의 숫자이면 True, 아니면 False를 반환합니다.

a = "123"
b = "123"
c = "3²"

print(a.isdecimal())	# True
print(b.isdecimal())	# False
print(c.isdecimal())	# False

 

    5) isnumeric

        - "문자열" . isnumeric()

        - 문자열이 숫자로 인식이 되면 True, 아니면 False를 반환합니다.

a = "123"
b = "3²"
c = "⅓"

print(a.isnumeric())	# True
print(b.isnumeric())	# True
print(c.isnumeric())	# True

 

 

    ※ 위의 3가지 함수(isdigit, isdecimal, isnumeric)는 약간의 차이점이 존재합니다.

        。True 반환 조건

             - isdecimal   : 0 ~ 9 사이의 숫자에 속하는 문자를 숫자로 판단합니다.

                                        (int로 바로 변환이 가능한 수)

             - isdigit          : 문자열이 '숫자'인지 판단합니다.

             - isnumeric  : 가장 폭넓은 의미로 숫자를 판단합니다. ( 분수도 숫자로 판단 가능 )                

문자열에서 수의 인식 범위

 

    6) isspace()

        - "문자열" . isspace()

        - 문자열이 모두 공백 문자(공백, 탭, 개행문자 등)로 이루어져 있으면 True, 아니면 False반환

        - 공백 문자

             - "\t" : 수평 탭을 나타내는 이스케이프 문자( 키보드의 tab 기능과 동일 )

             - "\n" : 개행( 다음 줄로 넘어감 )을 나타내는 이스케이프 문자

                           ( 키보드의 enter 기능과 동일 )

             - "\r" :  현재 커서 위치를 현재 라인의 시작 위치로 옮김 ( 캐리지 리턴 )

a = " "
b = "A "
c = "\t\n\r"

print(a.isspace())	# True
print(b.isspace())	# False
print(c.isspace())	# True

 

    7) isupper()

        - "문자열" . isupper()

        - 문자열이 모두 대문자 알파벳으로 이루어져 있는 경우에 True, 아니면 False를 반환합니다.

        - 다른 문자( 숫자, 특수문자 등)에 대해서는 영향을 받지 않습니다.

        - 반대의 기능 : islower()

a = "ABCD"
b = "Abcd"
c = "A1@D"
d = "A D"

print(a.isupper())	# True
print(b.isupper())	# False
print(c.isupper())	# True
print(d.isupper())	# True

 

 

 

② 문자열로 표현된 숫자식 계산

    eval()

        - eval("문자열")

        - 문자열로 표현된 숫자식을 계산합니다.

        - 반환된 계산 값은 int형 입니다.

a = '2+3'
b = '2*6-2'
c = '12//3'

print(eval(a))	# 5
print(eval(b))	# 10
print(eval(c))	# 4

 

 

 

③ 문자열의 유사성 비교

    SequenceMatcher()

        - SequenceMatcher(None, "문자열", "문자열").ratio()

        - 문자열 사이의 유사성을 비교하여 나타냅니다.

from difflib import SequenceMatcher

a = 'ABCD'
b = 'ABCD'
c = 'ABDC'
print(SequenceMatcher(None, a, b).ratio())	# 1.0 <class 'float'>
print(SequenceMatcher(None, a, c).ratio())	# 0.75 <class 'float'>

 

     - 속성

         - .a : 맨 처음 입력된 값을 나타냅니다.

          - .b : 다음으로 입력된 값을 나타냅니다.

         - ratio() : 정확한 유사성을 계산하지만, 비교적 느린 속도를 보여줍니다.

         - quick_ratio() : ratio()에 비해 빠른 계산을 보여주지만, 약간의 정확도 저하를 보여줄 수 있습니다.

         - real_quick_ratio() : 가장 빠른 계산속도를 보여주지만, 유사성의 정확도가 떨어지는 모습을 보여줄 수 있습니다.

from difflib import SequenceMatcher

txt1 = 'hello world'
txt2 = 'hello kim'
sqm = SequenceMatcher(None, txt1, txt2)

print(sqm.a)	# hello world
print(sqm.b)	# hello kim

print(sqm.ratio())		# 0.6
print(sqm.quick_ratio())	# 0.6
print(sqm.real_quick_ratio())	# 0.9