[Python] 대소문자 구분 없이 비교
April 19, 2024
문자열을 대소문자 구분 없이 같은지 비교하는 방법에 대해서 알아보겠습니다.
1. lower(), upper()를 이용한 방법
두개의 문자열을 비교할 때, 모두 소문자로 변경하여 비교하거나 대문자로 변경하여 비교하면 대소문자 구분 없이 같은지 비교할 수 있습니다.
lower()
: 문자열을 소문자로 변경upper()
: 문자열을 대문자로 변경
str1 = "Hello"
str2 = "hello"
if str1.lower() == str2.lower():
print("두 문자열은 동일함")
if str1.upper() == str2.upper():
print("두 문자열은 동일함")
Output:
두 문자열은 동일함
두 문자열은 동일함
lower()와 upper()의 리턴 값을 출력해보면 아래와 같이 소문자, 대문자로 변환됩니다.
str1 = "Hello"
print("lower: " + str1.lower())
print("upper: " + str1.upper())
Output:
lower: hello
upper: HELLO
2. casefold()를 이용한 방법
casefold()
도 lower()
와 동일하게 소문자로 변경합니다. 차이점은 casefold()
의 경우 다른 언어의 대소문자도 변경하지만 lower()
의 경우 영어만 소문자로 변경합니다.
대소문자가 있는 다른 언어가 포함된 문자열을 비교한다면 lower()
보다 casefold()
로 비교하는 것이 좋습니다.
str1 = "Hello"
str2 = "hello"
if str1.casefold() == str2.casefold():
print("두 문자열은 동일함")
Output:
두 문자열은 동일함
아래 예제를 보시면, casefold()는 독일어의 대문자 ß
를 소문자로 변경합니다.
str1 = "Hello, Preußen"
print("lower: " + str1.lower())
print("casefold: " + str1.casefold())
Output:
lower: hello, preußen
casefold: hello, preussen
3. 정규표현식을 이용한 방법
아래와 같이 두 문자열의 길이가 같은지 확인하고, 정규표현식으로 일치하는 패턴이 있는지 확인하여 두개의 문자열이 같은지 확인할 수 있습니다.
re.IGNORECASE
: 대소문자 구분 없이 문자열 비교re.escape(str1)
: str1의 문자들 중에서 특수문자를 정규표현식으로 사용하지 않고, 일반적인 문자로 사용
import re
str1 = "Hello"
str2 = "hello"
pattern = re.compile(re.escape(str1), re.IGNORECASE)
if pattern.match(str2) and len(str1) == len(str2):
print("두 문자열은 동일함")
Output:
두 문자열은 동일함
re.escape()에 대한 예제
re.escape(str)
에 대해서 좀 더 설명하면, [0-9]
는 정규표현식에서 0에서 9사이의 숫자 한개를 의미하는데, 실제 문자열에서 [0-9]
라는 텍스트를 찾을 때 정규표현식으로 동작해서 못찾을 수 있습니다. 이럴 때, [0-9]
는 정규표현식이 아니라 일반 문자열이라고 선언하는 의마가 re.escape("[0-9]")
가 됩니다.
import re
text = "[0-9]+"
pattern = re.compile(re.escape("[0-9]"))
matches = pattern.finditer(text)
for match in matches:
print(match.group())
Output:
[0-9]