* str.upper(), str.lower()
대문자 소문자로 변환한 값을 반환한다.
text = "Hello, World!"
upper_text = text.upper() # 모든 문자를 대문자로 변환
lower_text = text.lower() # 모든 문자를 소문자로 변환
print(upper_text) # 출력: "HELLO, WORLD!"
print(lower_text) # 출력: "hello, world!"
* swapcase() : string의 대소문자를 바꿔줍니다
print(input().swapcase())
* print시 r옵션
r은 raw를 의미하여 예약어를 이스케이핑 해줍니다.
regex 에서 pattern 설정 시 escape 문자를 많이 써야해서 자주 사용합니다.
print(r'!@#$%^&*(\'"<>?:;')
*split(str separator, int maxSplit)
split()는 separator를 기반으로 분리된 list를 반환합니다.
매개변수를 아무것도 넣지 않으면 중복된 공백을 자동으로 처리하여 분리해 줍니다.
# 기본적인 사용
text = "apple,banana,grape,orange"
fruits = text.split(',')
print(fruits) # 출력: ['apple', 'banana', 'grape', 'orange']
# 공백을 기준으로 분리
sentence = "Hello, how are you today?"
words = sentence.split()
print(words) # 출력: ['Hello,', 'how', 'are', 'you', 'today?']
# maxsplit 매개변수 사용
text = "apple,banana,grape,orange"
fruits = text.split(',', maxsplit=2)
print(fruits) # 출력: ['apple', 'banana', 'grape,orange']
*strip()
strip()은 문자열의 양쪽 끝에 있는 공백 문자(스페이스, 탭, 개행 등)을 제거하는 파이썬의 문자열 메소드입니다. 이를 통해 문자열의 불필요한 공백을 제거하거나 문자열을 깔끔하게 정리할 수 있습니다.
인자를 입력하면 해당 문자를 좌 우에서 제거해 줍니다.왼쪽, 오른쪽만 따로 적용시킬떄에는 lstrip()과 rstrip()을 사용할 수 있습니다.
print(input().strip().replace(' ', ''))
# lstrip() 예시
my_string = " Hello, world!"
result_lstrip = my_string.lstrip()
print(result_lstrip) # 출력: "Hello, world!"
# rstrip() 예시
my_string = "Hello, world! "
result_rstrip = my_string.rstrip()
print(result_rstrip) # 출력: "Hello, world!"
# lstrip()과 rstrip() 조합 예시
my_string = " Hello, world! "
result_combined = my_string.lstrip().rstrip()
print(result_combined) # 출력: "Hello, world!"
*replace(string,string)
첫번째 인자를 두번째 인자로 치환합니다.
print(input().strip().replace(' ', ''))
* str.startswith(str prefix) 와 str.endswith(str suffix)
접두사와 접미사가 맞는지 bool타입을 반환합니다.
def check_prefix(my_string, prefix):
return my_string.startswith(prefix)
# 예시
my_string = "Hello, World!"
prefix1 = "Hello"
prefix2 = "Hi"
print(check_prefix(my_string, prefix1)) # 출력: True
print(check_prefix(my_string, prefix2)) # 출력: False
def check_suffix(my_string, suffix):
return my_string.endswith(suffix)
# 예시
my_string = "Hello, World!"
suffix1 = "World!"
suffix2 = "Hi"
print(check_suffix(my_string, suffix1)) # 출력: True
print(check_suffix(my_string, suffix2)) # 출력: False
* ord(char)
문자의 유니코드 숫자 값을 반환한다.
65 : A
71 : a
def get_unicode_code_point(char):
return ord(char)
# 예시
char1 = 'A'
char2 = '가'
print(get_unicode_code_point(char1)) # 출력: 65
print(get_unicode_code_point(char2)) # 출력: 44032
* .translate(), str.maketrans()
- str.translate(table):
- translate 메서드는 문자열 내부의 각 문자를 다른 문자로 변환하는 데 사용됩니다.
- table은 변환 테이블을 나타내는 매개변수로, str.maketrans() 메서드를 통해 생성할 수 있습니다.
- 변환 테이블에 있는 각 문자의 위치는 해당 문자의 유니코드 값에 대응됩니다.
- 문자열 내의 각 문자는 변환 테이블에서 해당 문자의 유니코드 값의 위치를 찾아 대응되는 문자로 변환됩니다.
- str.maketrans(x, y, z=None):
- maketrans 메서드는 문자열을 변환하기 위한 테이블을 생성하는 데 사용됩니다.
- 세 개의 문자열 x, y, z를 인자로 받습니다. x와 y는 길이가 같아야 하며, z는 삭제될 문자를 나타내는 옵션 매개변수입니다.
- maketrans 메서드는 변환 테이블을 생성하여 반환합니다.
아래는 translate와 maketrans를 사용한 예시 코드와 주석 설명입니다:
# 문자열을 특정 문자로 변환하기
def example_translate():
my_string = "hello"
translation_table = str.maketrans('helo', '1234') # 'h' -> '1', 'e' -> '2', 'l' -> '3', 'o' -> '4'
translated_string = my_string.translate(translation_table)
print(translated_string) # 출력: '32114'
# 문자열에서 특정 문자 삭제하기
def example_remove_characters():
my_string = "apple"
translation_table = str.maketrans('', '', 'ae') # 'a'와 'e' 삭제
removed_string = my_string.translate(translation_table)
print(removed_string) # 출력: 'ppl'
# translate와 maketrans를 한 줄로 사용하기
def example_one_liner():
my_string = "hello"
translated_string = my_string.translate(str.maketrans('helo', '1234'))
print(translated_string) # 출력: '32114'
# solution 함수 예제
def solution(myString):
return myString.translate(str.maketrans('abcdefghijk', 'lllllllllll'))
* str.isdigit()
`.isdigit()` 메서드는 문자열이 모두 숫자로 구성되어 있는지 확인하는 파이썬의 문자열 메서드입니다. 이 메서드를 호출하면 문자열이 다음과 같은 조건을 만족하는지 여부를 판별합니다:
1. 문자열의 모든 문자가 0에서 9 사이의 숫자 문자일 때에만 `True`를 반환합니다.
2. 즉, 문자열이 하나 이상의 문자를 포함하고 있어야 합니다. 빈 문자열은 `False`를 반환합니다.
`.isdigit()` 메서드는 주로 입력값이 숫자인지 아닌지를 확인할 때 사용합니다.
예를 들어 아래의 예시에서 `isdigit()` 메서드는 각각의 문자열에 대해 숫자인지 아닌지를 판별하여 해당하는 결과를 반환합니다. `'12345'`는 모두 숫자이므로 `True`를 반환하고, `'12 34'`는 공백이 포함되어 있기 때문에 `False`를 반환합니다. `'Hello'`는 알파벳 문자를 포함하고 있기 때문에 `False`를 반환하며, 빈 문자열 `""`도 문자가 없으므로 `False`를 반환합니다.
# 숫자로만 구성된 문자열
number_str = "12345"
result1 = number_str.isdigit()
print(result1) # 출력: True
# 공백이 포함된 문자열
space_str = "12 34"
result2 = space_str.isdigit()
print(result2) # 출력: False
# 알파벳 문자열
alpha_str = "Hello"
result3 = alpha_str.isdigit()
print(result3) # 출력: False
# 빈 문자열
empty_str = ""
result4 = empty_str.isdigit()
print(result4) # 출력: False
* re 모듈을 사용한 정규식
파이썬의 re 모듈은 정규식(RegEx, Regular Expression)를 사용하여 문자열을 처리할 수 있는 강력한 도구입니다. 여기에는 여러 가지 메타 문자, 시퀀스 및 특수 시퀀스가 포함되어 있습니다.
1. **메타 문자**: 이 문자들은 특별한 의미를 가지며, 이들을 조합하여 복잡한 검색 패턴을 만들 수 있습니다.
- `.` : 개행문자를 제외한 모든 문자와 일치
- `^` : 문자열의 시작과 일치
- `$` : 문자열의 끝과 일치
- `*` : 이전 문자가 0번 이상 반복되는 패턴과 일치
- `+` : 이전 문자가 1번 이상 반복되는 패턴과 일치
- `?` : 이전 문자가 0번 또는 1번 반복되는 패턴과 일치
- `{}` : 이전 문자가 특정 수의 반복을 가지는 패턴과 일치
- `[]` : 문자 집합을 나타냅니다. 예를 들어, `[abc]`는 'a', 'b', 'c' 중 하나와 일치합니다.
- `|` : OR 조건을 의미, `a|b`는 'a' 또는 'b'와 일치
- `()` : 그룹을 만들고 그룹화된 부분에 대해 메타 문자를 적용
- `\` : 특수 문자의 실제 의미를 나타내거나 특수 시퀀스를 나타냅니다.
2. **특수 시퀀스**: 이 시퀀스들은 `\` 문자로 시작하며 특별한 의미를 가지고 있습니다.
- `\d` : 모든 숫자와 일치 ([0-9]와 동일)
- `\D` : 숫자가 아닌 모든 문자와 일치
- `\s` : 모든 공백 문자(공백, 탭, 줄 바꿈 등)와 일치
- `\S` : 공백 문자가 아닌 모든 문자와 일치
- `\w` : 모든 문자, 숫자 및 밑줄 문자와 일치 ([a-zA-Z0-9_]와 동일)
- `\W` : 문자, 숫자, 밑줄이 아닌 모든 문자와 일치
- `\b` : 단어의 시작 또는 끝을 나타내는 단어 경계
- `\B` : 단어 경계가 아닌 위치
- `\\` : 실제 역 슬래시 문자와 일치
3. **메소드**:
- `re.match()` : 문자열의 시작 부분이 정규식과 일치하는지 확인
- `re.search()` : 문자열 전체에서 정규식과 일치하는 부분이 있는지 확인
- `re.findall()` : 정규식과 일치하는 모든 부분을 리스트로 반환
- `re.sub()` : 정규식과 일치하는 부분을 다른 문자열로 치환
- `re.split()` : 정규식에 일치하는 부분에서 문자열을 분할
이를 활용하여 다양한 문자열 처리 작업을 할 수 있습니다. 위의 정규식을 사용하여 특정 문자열 패턴을 찾거나 치환하는 등의 작업을 수행할 수 있습니다.
*r"str", raw string
`r`은 Python에서 raw string을 의미합니다. 일반적인 문자열에서는 역 슬래시`\`를 특수 문자의 escape 문자로 사용합니다. 예를 들어, `\n`은 줄바꿈을, `\t`는 탭을 나타내는 등입니다.
그러나 정규 표현식에서는 역 슬래시`\`가 메타 문자를 이스케이프하는데 사용됩니다. 예를 들어, `\d`는 모든 숫자를 의미하고, `\\`는 역슬래시 자체를 나타냅니다.
따라서, 정규 표현식 문자열에서 역 슬래시를 이용하려면 두 번 사용해야 합니다. 예를 들어, 모든 숫자를 찾으려면 `"\\d"`와 같이 작성해야 합니다. 이는 가독성을 떨어뜨리고 실수를 유발할 수 있습니다.
그래서 Python에서는 raw string 표기법인 `r`을 제공합니다. 이를 사용하면 역 슬래시를 한 번만 써도 그대로 역 슬래시로 인식합니다. 따라서 `"\\d"` 대신 `r"\d"`로 작성할 수 있습니다.
요약하면, `r`을 사용하면 역 슬래시를 두 번 쓰지 않고도 문자열 내의 역 슬래시를 그대로 해석할 수 있어, 정규 표현식을 더 쉽게 작성할 수 있습니다.
import re
def solution(my_string):
return sum([int(i) for i in re.findall(r'[0-9]+', my_string)])
`re`는 Python의 정규 표현식(regular expression) 모듈입니다. 정규 표현식은 문자열에서 특정한 패턴을 찾거나 매칭하는 데 사용되는 강력한 도구로, 특정한 규칙을 따르는 문자열을 효율적으로 검색, 추출, 치환할 수 있습니다.
`r'[0-9]+'`는 하나 이상의 숫자(0부터 9까지의 숫자)가 연속적으로 나타나는 패턴을 나타냅니다. 각 부분에 대해 자세히 설명하면 다음과 같습니다:
- `r`: `r`은 Python에서 사용되는 Raw String Literal의 접두사로, 문자열 안에 있는 이스케이프(Escape) 문자를 해석하지 않고 그대로 사용하도록 합니다. 정규 표현식에서 Raw String Literal을 사용하면 백슬래시(`\`)를 이스케이프하지 않고도 패턴을 표현할 수 있습니다.
- `[0-9]`: `[ ]`는 문자 클래스(character class)를 나타내며, 여기서는 0부터 9까지의 숫자 중 하나를 의미합니다. 따라서 `[0-9]`는 하나의 숫자에 매칭됩니다.
- `+`: `+`는 앞의 패턴이 하나 이상 반복됨을 의미합니다. 즉, `[0-9]+`는 하나 이상의 숫자가 연속적으로 나타나는 패턴을 의미합니다. 따라서 "123", "4567"과 같은 숫자에 매칭되지만, "abc"와 같은 문자열에는 매칭되지 않습니다.
따라서, `re.findall(r'[0-9]+', my_string)`는 입력된 `my_string`에서 숫자들의 연속을 찾아서 리스트로 반환하는 역할을 합니다. 그리고 그 반환된 숫자들을 `int(i)`를 통해 정수로 변환한 후, `sum` 함수를 이용하여 모든 숫자들의 합을 구한 뒤, 이 값을 최종적으로 함수의 반환값으로 돌려줍니다.
import re
def extract_emails(text):
pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
emails = re.findall(pattern, text, re.IGNORECASE)
return emails
# 테스트
sample_text = "이것은 example123@gmail.com과 test_456@example.co.kr의 예시 이메일 주소입니다."
result = extract_emails(sample_text)
print(result) # 출력: ['example123@gmail.com', 'test_456@example.co.kr']
위 코드에서 사용된 정규 표현식 패턴 `r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'`는 다음과 같은 의미를 가집니다:
- `\b`: 단어 경계를 나타냅니다. 이를 사용함으로써 이메일 주소가 다른 문자와 붙어있는 경우를 방지합니다.
- `[A-Za-z0-9._%+-]+`: 이메일 주소의 로컬 파트로 사용될 수 있는 문자들을 허용합니다. `+`는 앞의 패턴이 하나 이상 반복됨을 의미합니다.
- `@`: 이메일 주소에서 '@' 문자를 나타냅니다.
- `[A-Za-z0-9.-]+`: 이메일 주소의 도메인 파트로 사용될 수 있는 문자들을 허용합니다.
- `\.`: 점(.) 문자를 이스케이프하여 문자 그대로를 나타냅니다.
- `[A-Z|a-z]{2,}`: 최소 2개 이상의 대문자 또는 소문자 알파벳으로 이루어진 최상위 도메인을 나타냅니다. `{2,}`는 최소 2개 이상 반복됨을 의미합니다.
위 패턴에 부합하는 이메일 주소를 `re.findall` 함수를 통해 추출하고, 결과를 리스트로 반환합니다. 출력 결과로는 입력 텍스트에 포함된 모든 이메일 주소가 추출되어 나올 것입니다.
'코딩테스트-파이썬' 카테고리의 다른 글
python 코테관련 기능 정리 -딕셔너리- (0) | 2023.07.22 |
---|---|
python 코테 관련 기능 정리 -Iterable(리스트(배열), 튜플, 집합(set))- (0) | 2023.07.22 |
리스트 컴프리헨션 (0) | 2023.07.22 |
1.2코딩과 디버깅 (0) | 2023.07.20 |
1.1 코딩 테스트란? (0) | 2023.07.20 |