KR_String - somaz94/python-study GitHub Wiki

Python ๋ฌธ์ž์—ด(String) ๊ฐœ๋… ์ •๋ฆฌ


1๏ธโƒฃ ๋ฌธ์ž์—ด์ด๋ž€?

๋ฌธ์ž์—ด(String)์€ ์—ฐ์†๋œ ๋ฌธ์ž๋“ค์˜ ๋‚˜์—ด์„ ๋งํ•œ๋‹ค. ํŒŒ์ด์ฌ์—์„œ๋Š” ์ž‘์€๋”ฐ์˜ดํ‘œ(')๋‚˜ ํฐ๋”ฐ์˜ดํ‘œ(")๋กœ ๋‘˜๋Ÿฌ์‹ธ์ธ ๋ฌธ์ž๋“ค์˜ ์ง‘ํ•ฉ์„ ์˜๋ฏธํ•œ๋‹ค.

"Life is too short, You need Python"
"a"
"123"  # ์ˆซ์ž๋„ ๋”ฐ์˜ดํ‘œ๋กœ ๋‘˜๋Ÿฌ์‹ธ์ด๋ฉด ๋ฌธ์ž์—ด


2๏ธโƒฃ ๋ฌธ์ž์—ด ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

1. ๋”ฐ์˜ดํ‘œ๋กœ ๋‘˜๋Ÿฌ์‹ธ๊ธฐ

# 1. ํฐ๋”ฐ์˜ดํ‘œ
str1 = "Hello World"

# 2. ์ž‘์€๋”ฐ์˜ดํ‘œ
str2 = 'Python is fun'

# 3. ํฐ๋”ฐ์˜ดํ‘œ 3๊ฐœ
str3 = """Life is too short,
You need python"""

# 4. ์ž‘์€๋”ฐ์˜ดํ‘œ 3๊ฐœ
str4 = '''Life is too short,
You need python'''

2. ๋”ฐ์˜ดํ‘œ ํฌํ•จํ•˜๊ธฐ

# 1. ์ž‘์€๋”ฐ์˜ดํ‘œ ํฌํ•จํ•˜๊ธฐ
food = "Python's favorite food is perl"

# 2. ํฐ๋”ฐ์˜ดํ‘œ ํฌํ•จํ•˜๊ธฐ
say = '"Python is very easy." he says.'

# 3. ์—ญ์Šฌ๋ž˜์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํฌํ•จํ•˜๊ธฐ
food = 'Python\'s favorite food is perl'
say = "\"Python is very easy.\" he says."

โœ… Tip:

  • ๋ฌธ์ž์—ด ์•ˆ์— ์ž‘์€๋”ฐ์˜ดํ‘œ๊ฐ€ ์žˆ๋‹ค๋ฉด ํฐ๋”ฐ์˜ดํ‘œ๋กœ ๋‘˜๋Ÿฌ์‹ธ๊ธฐ
  • ๋ฌธ์ž์—ด ์•ˆ์— ํฐ๋”ฐ์˜ดํ‘œ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ž‘์€๋”ฐ์˜ดํ‘œ๋กœ ๋‘˜๋Ÿฌ์‹ธ๊ธฐ
  • ์—ญ์Šฌ๋ž˜์‹œ(\)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋”ฐ์˜ดํ‘œ๋ฅผ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅ

3. ์—ฌ๋Ÿฌ ์ค„์ธ ๋ฌธ์ž์—ด ๋งŒ๋“ค๊ธฐ

# 1. ์ด์Šค์ผ€์ดํ”„ ์ฝ”๋“œ ์‚ฌ์šฉ
multiline = "Life is too short\nYou need python"

# 2. ๋”ฐ์˜ดํ‘œ 3๊ฐœ ์‚ฌ์šฉ
multiline = """
Life is too short
You need python
"""

4. ์›์‹œ ๋ฌธ์ž์—ด(Raw String)

์—ญ์Šฌ๋ž˜์‹œ(\)๋ฅผ ์ผ๋ฐ˜ ๋ฌธ์ž๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

# ์ผ๋ฐ˜ ๋ฌธ์ž์—ด
print("C:\\Users\\user\\Documents")  # C:\Users\user\Documents

# ์›์‹œ ๋ฌธ์ž์—ด (r ์ ‘๋‘์–ด ์‚ฌ์šฉ)
print(r"C:\Users\user\Documents")    # C:\Users\user\Documents

# ์ •๊ทœ์‹์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ
import re
pattern = r"\bword\b"  # ๋‹จ์–ด ๊ฒฝ๊ณ„์— ์žˆ๋Š” "word" ์ฐพ๊ธฐ

โœ… Tip:

  • ์›์‹œ ๋ฌธ์ž์—ด์€ r ์ ‘๋‘์–ด๋ฅผ ์‚ฌ์šฉ
  • ํŒŒ์ผ ๊ฒฝ๋กœ๋‚˜ ์ •๊ทœ์‹์—์„œ ์œ ์šฉ
  • ์ด์Šค์ผ€์ดํ”„ ์‹œํ€€์Šค๊ฐ€ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์Œ


3๏ธโƒฃ ์ด์Šค์ผ€์ดํ”„ ์ฝ”๋“œ

์ฝ”๋“œ ์„ค๋ช…
\n ์ค„๋ฐ”๊ฟˆ
\t ํƒญ
\\ ๋ฌธ์ž \
\' ์ž‘์€๋”ฐ์˜ดํ‘œ
\" ํฐ๋”ฐ์˜ดํ‘œ
\r ์บ๋ฆฌ์ง€ ๋ฆฌํ„ด
\f ํผ ํ”ผ๋“œ
\a ๋ฒจ ์†Œ๋ฆฌ
\b ๋ฐฑ์ŠคํŽ˜์ด์Šค
\000 ๋„๋ฌธ์ž
\xhh 16์ง„์ˆ˜ hh์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์ž
\uhhhh 16์ง„์ˆ˜ hhhh์— ํ•ด๋‹นํ•˜๋Š” ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž

โœ… Tip:

  • ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์€ \n, \t, \\, \', \"
  • ๋ฌธ์ž์—ด ๋‚ด์—์„œ ํŠน์ˆ˜ํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๋ฌธ์ž๋“ค์„ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ
  • \x, \u๋Š” ํŠน์ • ์ฝ”๋“œ ํฌ์ธํŠธ์˜ ๋ฌธ์ž๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ


4๏ธโƒฃ ๋ฌธ์ž์—ด ์—ฐ์‚ฐ

1. ๋ฌธ์ž์—ด ๋”ํ•˜๊ธฐ (์—ฐ๊ฒฐ)

head = "Python"
tail = " is fun!"
head + tail    # 'Python is fun!'

2. ๋ฌธ์ž์—ด ๊ณฑํ•˜๊ธฐ (๋ฐ˜๋ณต)

a = "python"
a * 2          # 'pythonpython'

# ์‘์šฉ
print("=" * 50) # 50๊ฐœ์˜ ๋“ฑํ˜ธ๋ฅผ ์ถœ๋ ฅ
print("My Program")

3. ๋ฌธ์ž์—ด ๊ธธ์ด ๊ตฌํ•˜๊ธฐ

a = "Life is too short"
len(a)         # 17 - ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๋ฐ˜ํ™˜

4. ๋ฌธ์ž์—ด ๋ฉค๋ฒ„์‹ญ ํ…Œ์ŠคํŠธ

# in ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ
print("Python" in "Python is fun")  # True
print("Java" in "Python is fun")    # False


5๏ธโƒฃ ๋ฌธ์ž์—ด ์ธ๋ฑ์‹ฑ๊ณผ ์Šฌ๋ผ์ด์‹ฑ

1. ๋ฌธ์ž์—ด ์ธ๋ฑ์‹ฑ

a = "Life is too short, You need Python"
a[3]     # 'e' (์™ผ์ชฝ์—์„œ 4๋ฒˆ์งธ ๋ฌธ์ž)
a[-1]    # 'n' (์˜ค๋ฅธ์ชฝ์—์„œ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž)

โœ… Tip:

  • ์ธ๋ฑ์Šค๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘
  • ์Œ์ˆ˜ ์ธ๋ฑ์Šค๋Š” ๋’ค์—์„œ๋ถ€ํ„ฐ ์ ‘๊ทผ (-1๋ถ€ํ„ฐ ์‹œ์ž‘)

2. ๋ฌธ์ž์—ด ์Šฌ๋ผ์ด์‹ฑ

a = "Life is too short, You need Python"
a[0:4]   # 'Life' - 0๋ฒˆ์งธ๋ถ€ํ„ฐ 4๋ฒˆ์งธ ๊ธ€์ž ์ง์ „๊นŒ์ง€
a[19:]   # 'You need Python' - 19๋ฒˆ์งธ๋ถ€ํ„ฐ ๋๊นŒ์ง€
a[:17]   # 'Life is too short' - ์ฒ˜์Œ๋ถ€ํ„ฐ 17๋ฒˆ์งธ ๊ธ€์ž ์ง์ „๊นŒ์ง€
a[:]     # ์ „์ฒด ๋ฌธ์ž์—ด
a[19:-7] # 'You need' - 19๋ฒˆ์งธ๋ถ€ํ„ฐ ๋์—์„œ 7๋ฒˆ์งธ ๊ธ€์ž ์ง์ „๊นŒ์ง€

# ์Šคํ…(step) ์‚ฌ์šฉ
a[::2]   # 'Lf st hr,Y edPto' - 2์นธ์”ฉ ๊ฑด๋„ˆ๋›ฐ๋ฉฐ ์„ ํƒ
a[::-1]  # 'nohtyP deen uoY ,trohs oot si efiL' - ๋ฌธ์ž์—ด ๋’ค์ง‘๊ธฐ

โœ… Tip:

  • a[์‹œ์ž‘:๋] ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉ
  • ๋ ๋ฒˆํ˜ธ๋Š” ํฌํ•จ๋˜์ง€ ์•Š์Œ
  • ์‹œ์ž‘ ๋ฒˆํ˜ธ ์ƒ๋žต ์‹œ ์ฒ˜์Œ๋ถ€ํ„ฐ
  • ๋ ๋ฒˆํ˜ธ ์ƒ๋žต ์‹œ ๋๊นŒ์ง€
  • a[์‹œ์ž‘:๋:์Šคํ…] ํ˜•์‹์œผ๋กœ ์Šคํ…(๊ฐ„๊ฒฉ) ์ง€์ • ๊ฐ€๋Šฅ


6๏ธโƒฃ ๋ฌธ์ž์—ด ํฌ๋งทํŒ…

์ง€์ •์ž ์„ค๋ช… ์˜ˆ์‹œ
%d ์ •์ˆ˜(decimal) print("%d" % 10) โ†’ "10"
%f ์‹ค์ˆ˜(float) print("%.2f" % 3.14) โ†’ "3.14"
%s ๋ฌธ์ž์—ด(string) print("%s" % "hello") โ†’ "hello"
%r repr() ๊ฒฐ๊ณผ print("%r" % "hello") โ†’ "'hello'"
%c ๋ฌธ์ž ํ•˜๋‚˜ print("%c" % 'A') โ†’ "A"
%% % ๋ฌธ์ž ์ž์ฒด print("%%") โ†’ "%"

1. % ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ

# ์ˆซ์ž ๋Œ€์ž…
"I eat %d apples." % 3 # 'I eat 3 apples.'

# ๋ฌธ์ž์—ด ๋Œ€์ž…
"I eat %s apples." % "five" # 'I eat five apples.'

# ์—ฌ๋Ÿฌ ๊ฐ’ ๋Œ€์ž…
number = 10
day = "three"
"I ate %d apples. so I was sick for %s days." % (number, day) # 'I ate 10 apples. so I was sick for three days.'

# ์†Œ์ˆ˜์  ํ‘œํ˜„
"Pi is approximately %.2f" % 3.14159  # 'Pi is approximately 3.14'

# ์ •๋ ฌ๊ณผ ํญ ์ง€์ •
"%10s" % "hi"  # '        hi' - ์šฐ์ธก์ •๋ ฌ, 10์นธ ํญ
"%-10s" % "hi" # 'hi        ' - ์ขŒ์ธก์ •๋ ฌ, 10์นธ ํญ

2. format() ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ

# ๊ธฐ๋ณธ ์‚ฌ์šฉ
"I eat {0} apples".format(3) # 'I eat 3 apples'

# ์ด๋ฆ„์œผ๋กœ ๋„ฃ๊ธฐ
"I ate {number} apples. so I was sick for {day} days.".format(number=10, day=3) # 'I ate 10 apples. so I was sick for three days.'

# ์ธ๋ฑ์Šค์™€ ์ด๋ฆ„ ํ˜ผ์šฉ
"I ate {0} apples. so I was sick for {day} days.".format(10, day=3)

# ์ •๋ ฌ
"{0:<10}".format("hi")  # 'hi        ' - ์™ผ์ชฝ ์ •๋ ฌ
"{0:>10}".format("hi")  # '        hi' - ์˜ค๋ฅธ์ชฝ ์ •๋ ฌ
"{0:^10}".format("hi")  # '    hi    ' - ๊ฐ€์šด๋ฐ ์ •๋ ฌ

# ๊ณต๋ฐฑ ์ฑ„์šฐ๊ธฐ
"{0:=^10}".format("hi") # '====hi====' - ๊ฐ€์šด๋ฐ ์ •๋ ฌ, = ๋ฌธ์ž๋กœ ์ฑ„์šฐ๊ธฐ

# ์†Œ์ˆ˜์  ํ‘œํ˜„
"{0:.2f}".format(3.14159)  # '3.14'

# ์ฒœ ๋‹จ์œ„ ์ฝค๋งˆ
"{0:,}".format(1000000)  # '1,000,000'

# ๊ธฐํƒ€ ํ˜•์‹ ์ง€์ •
"{0:b}".format(42)     # '101010' - 2์ง„์ˆ˜
"{0:o}".format(42)     # '52' - 8์ง„์ˆ˜
"{0:x}".format(42)     # '2a' - 16์ง„์ˆ˜
"{0:e}".format(42.0)   # '4.200000e+01' - ์ง€์ˆ˜ ํ‘œ๊ธฐ๋ฒ•

3. f-๋ฌธ์ž์—ด ์‚ฌ์šฉ (Python 3.6+)

name = 'ํ™๊ธธ๋™'
age = 30
f'๋‚˜์˜ ์ด๋ฆ„์€ {name}์ž…๋‹ˆ๋‹ค. ๋‚˜์ด๋Š” {age}์ž…๋‹ˆ๋‹ค.' # '๋‚˜์˜ ์ด๋ฆ„์€ ํ™๊ธธ๋™์ž…๋‹ˆ๋‹ค. ๋‚˜์ด๋Š” 30์ž…๋‹ˆ๋‹ค.'

# ํ‘œํ˜„์‹ ์‚ฌ์šฉ
age = 30
f'๋‚˜๋Š” ๋‚ด๋…„์ด๋ฉด {age+1}์‚ด์ด ๋œ๋‹ค.' # '๋‚˜๋Š” ๋‚ด๋…„์ด๋ฉด 31์‚ด์ด ๋œ๋‹ค.'

# ์ •๋ ฌ
f'{"hi":<10}'  # 'hi        ' - ์™ผ์ชฝ ์ •๋ ฌ
f'{"hi":>10}'  # '        hi' - ์˜ค๋ฅธ์ชฝ ์ •๋ ฌ
f'{"hi":^10}'  # '    hi    ' - ๊ฐ€์šด๋ฐ ์ •๋ ฌ

# Python 3.8+ ๋””๋ฒ„๊น… ์ง€์›
f'{name=}'     # "name='ํ™๊ธธ๋™'" - ๋ณ€์ˆ˜๋ช…๊ณผ ๊ฐ’ ํ•จ๊ป˜ ์ถœ๋ ฅ

# ์†Œ์ˆ˜์  ํ˜•์‹
f'{3.14159:.2f}'  # '3.14'

# ๋‚ ์งœ ํ˜•์‹
import datetime
now = datetime.datetime.now()
f'{now:%Y-%m-%d %H:%M:%S}'  # '2023-07-01 12:34:56' - ๋‚ ์งœ ํ˜•์‹ ์ง€์ •

# ๋ณตํ•ฉ ํ˜•์‹
f'{"python":!^20}'  # '!!!!!!!python!!!!!!!' - ์ฑ„์šฐ๊ธฐ, ์ •๋ ฌ, ํญ ์ง€์ •

# ์ฒœ ๋‹จ์œ„ ๊ตฌ๋ถ„
f'{1000000:,}'  # '1,000,000'

โœ… Tip:

  • Python 3.6 ์ด์ƒ์—์„œ๋Š” f-๋ฌธ์ž์—ด ๋ฐฉ์‹์„ ๊ถŒ์žฅ
  • f-๋ฌธ์ž์—ด์€ ๋ณ€์ˆ˜๋ฅผ ์ง์ ‘ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์–ด ๊ฐ€๋…์„ฑ์ด ์ข‹์Œ
  • ํ‘œํ˜„์‹๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • Python 3.8๋ถ€ํ„ฐ๋Š” ๋””๋ฒ„๊น… ์ง€์› (๋ณ€์ˆ˜๋ช…๊ณผ ๊ฐ’ ํ•จ๊ป˜ ์ถœ๋ ฅ)


7๏ธโƒฃ ๋ฌธ์ž์—ด ๊ด€๋ จ ํ•จ์ˆ˜๋“ค

1. ๋ฌธ์ž ๊ฐœ์ˆ˜ ์„ธ๊ธฐ (count)

a = "hobby"
a.count('b')  # 2 - ๋ฌธ์ž์—ด ๋‚ด 'b'์˜ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜

2. ์œ„์น˜ ์ฐพ๊ธฐ (find, index, rfind, rindex)

a = "Python is the best choice"
a.find('b')    # 14 - 'b'์˜ ์œ„์น˜ ๋ฐ˜ํ™˜, ์—†์œผ๋ฉด -1 ๋ฐ˜ํ™˜
a.index('b')   # 14 - 'b'์˜ ์œ„์น˜ ๋ฐ˜ํ™˜, ์—†์œผ๋ฉด ์˜ค๋ฅ˜ ๋ฐœ์ƒ

# ๊ฒ€์ƒ‰ ์‹œ์ž‘ ์œ„์น˜ ์ง€์ •
a.find('t', 3)  # 11 - ์ธ๋ฑ์Šค 3๋ถ€ํ„ฐ 't'๋ฅผ ์ฐพ์Œ

# ์˜ค๋ฅธ์ชฝ์—์„œ๋ถ€ํ„ฐ ์ฐพ๊ธฐ
a.rfind('t')    # 19 - ์˜ค๋ฅธ์ชฝ์—์„œ๋ถ€ํ„ฐ 't' ๊ฒ€์ƒ‰
a.rindex('t')   # 19 - ์˜ค๋ฅธ์ชฝ์—์„œ๋ถ€ํ„ฐ 't' ๊ฒ€์ƒ‰

3. ๋ฌธ์ž์—ด ์‚ฝ์ž… (join)

",".join('abcd')                    # 'a,b,c,d'
",".join(['a', 'b', 'c', 'd'])     # 'a,b,c,d'

# ์—ฌ๋Ÿฌ ๋ฌธ์ž์—ด ๊ฒฐํ•ฉ (์„ฑ๋Šฅ์ƒ ์ด์ )
words = ["Hello", "World", "Python"]
" ".join(words)  # 'Hello World Python'

4. ๋Œ€์†Œ๋ฌธ์ž ๋ณ€ํ™˜

a = "hi"
a.upper()      # 'HI' - ๋Œ€๋ฌธ์ž๋กœ ๋ณ€ํ™˜
a.lower()      # 'hi' - ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜
a.capitalize()  # 'Hi' - ์ฒซ ๊ธ€์ž๋งŒ ๋Œ€๋ฌธ์ž๋กœ
a.title()       # ๊ฐ ๋‹จ์–ด์˜ ์ฒซ ๊ธ€์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ

# ๋Œ€์†Œ๋ฌธ์ž ๋ฐ˜์ „
"Hello World".swapcase()  # 'hELLO wORLD'

# ๋Œ€์†Œ๋ฌธ์ž ํ™•์ธ
"ABC".isupper()  # True - ๋ชจ๋‘ ๋Œ€๋ฌธ์ž์ธ์ง€ ํ™•์ธ
"abc".islower()  # True - ๋ชจ๋‘ ์†Œ๋ฌธ์ž์ธ์ง€ ํ™•์ธ

5. ๊ณต๋ฐฑ ๋ฐ ๋ฌธ์ž ์ œ๊ฑฐ

a = " hi "
a.lstrip()     # 'hi ' - ์™ผ์ชฝ ๊ณต๋ฐฑ ์ œ๊ฑฐ
a.rstrip()     # ' hi' - ์˜ค๋ฅธ์ชฝ ๊ณต๋ฐฑ ์ œ๊ฑฐ
a.strip()      # 'hi' - ์–‘์ชฝ ๊ณต๋ฐฑ ์ œ๊ฑฐ

# ํŠน์ • ๋ฌธ์ž ์ œ๊ฑฐ
"www.example.com".strip('w.com')  # 'example' - ์–‘์ชฝ์—์„œ w, ., c, o, m ๋ฌธ์ž๋“ค ์ œ๊ฑฐ

6. ๋ฌธ์ž์—ด ๋ฐ”๊พธ๊ธฐ (replace)

a = "Life is too short"
a.replace("Life", "Your leg")  # 'Your leg is too short'

# ์น˜ํ™˜ ํšŸ์ˆ˜ ์ œํ•œ
"hello hello hello".replace("hello", "hi", 2)  # 'hi hi hello'

7. ๋ฌธ์ž์—ด ๋‚˜๋ˆ„๊ธฐ (split, partition)

a = "Life is too short"
a.split()        # ['Life', 'is', 'too', 'short']

b = "a:b:c:d"
b.split(':')     # ['a', 'b', 'c', 'd']

# ๋ถ„ํ•  ๊ฐœ์ˆ˜ ์ œํ•œ
"a:b:c:d:e".split(':', 2)  # ['a', 'b', 'c:d:e']

# ์ค„ ๋‹จ์œ„๋กœ ๋ถ„ํ• 
multiline = "Line1\nLine2\nLine3"
multiline.splitlines()  # ['Line1', 'Line2', 'Line3']

# 3๋ถ„ํ•  (์•ž๋ถ€๋ถ„, ๊ตฌ๋ถ„์ž, ๋’ท๋ถ€๋ถ„)
"name=value".partition('=')  # ('name', '=', 'value')

8. ๋ฌธ์ž์—ด ํŒ๋‹จ ๋ฉ”์„œ๋“œ

# ์•ŒํŒŒ๋ฒณ ๋˜๋Š” ์ˆซ์ž ํŒ๋‹จ
"abc123".isalnum()  # True - ์•ŒํŒŒ๋ฒณ ๋˜๋Š” ์ˆซ์ž๋กœ๋งŒ ๊ตฌ์„ฑ
"abc".isalpha()     # True - ์•ŒํŒŒ๋ฒณ์œผ๋กœ๋งŒ ๊ตฌ์„ฑ
"123".isdigit()     # True - ์ˆซ์ž๋กœ๋งŒ ๊ตฌ์„ฑ
"3.14".isnumeric()  # False - ์†Œ์ˆ˜์ ์€ ์ˆซ์ž๋กœ ์ธ์‹ ์•ˆ๋จ

# ๊ณต๋ฐฑ ํŒ๋‹จ
" \t\n".isspace()   # True - ๊ณต๋ฐฑ ๋ฌธ์ž๋กœ๋งŒ ๊ตฌ์„ฑ

# ์‹๋ณ„์ž ํŒ๋‹จ
"valid_name".isidentifier()  # True - ์œ ํšจํ•œ Python ์‹๋ณ„์ž(๋ณ€์ˆ˜๋ช…)

# ์‹œ์ž‘/๋ ํŒ๋‹จ
"Hello".startswith("He")   # True - "He"๋กœ ์‹œ์ž‘ํ•˜๋Š”์ง€
"Hello".endswith("lo")     # True - "lo"๋กœ ๋๋‚˜๋Š”์ง€

# ๋ชจ๋‘ ํ‘œ์‹œ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ž์ธ์ง€ 
"Hello!".isprintable()     # True - ๋ชจ๋‘ ์ถœ๋ ฅ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ž์ธ์ง€

9. ๋ฌธ์ž์—ด ์ •๋ ฌ ๋ฐ ์ฑ„์šฐ๊ธฐ

# ์™ผ์ชฝ ์ •๋ ฌ
"hello".ljust(10)      # 'hello     ' - ์™ผ์ชฝ ์ •๋ ฌ, 10์ž๋ฆฌ

# ์˜ค๋ฅธ์ชฝ ์ •๋ ฌ
"hello".rjust(10)      # '     hello' - ์˜ค๋ฅธ์ชฝ ์ •๋ ฌ, 10์ž๋ฆฌ

# ๊ฐ€์šด๋ฐ ์ •๋ ฌ
"hello".center(10)     # '  hello   ' - ๊ฐ€์šด๋ฐ ์ •๋ ฌ, 10์ž๋ฆฌ

# 0์œผ๋กœ ์ฑ„์šฐ๊ธฐ (์ˆซ์ž ์ถœ๋ ฅ์šฉ)
"42".zfill(5)          # '00042' - 0์œผ๋กœ ์ฑ„์›Œ 5์ž๋ฆฌ๋กœ

10. ๋ฌธ์ž์—ด ๋งตํ•‘๊ณผ ๋ฒˆ์—ญ

# maketrans๋กœ ๋ณ€ํ™˜ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ํ›„ translate๋กœ ๋ณ€ํ™˜
translation_table = str.maketrans('abc', '123')
"abcdef".translate(translation_table)  # '123def'

# ์‚ญ์ œ ๋ฌธ์ž ์ง€์ •
rm_table = str.maketrans('', '', 'aeiou')
"Hello World".translate(rm_table)  # 'Hll Wrld' - ๋ชจ์Œ ์ œ๊ฑฐ

โœ… ์ฃผ์˜์‚ฌํ•ญ:

  • ๋ฌธ์ž์—ด์€ immutable(๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ) ์ž๋ฃŒํ˜•
  • ๋ฌธ์ž์—ด ํ•จ์ˆ˜๋“ค์€ ์›๋ณธ์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜
  • ์›๋ณธ ๋ณ€๊ฒฝ์„ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜ํ™˜๊ฐ’์„ ๋‹ค์‹œ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ด์•ผ ํ•จ
# ์ž˜๋ชป๋œ ์‚ฌ์šฉ
a = "hi"
a.upper()      # a๋Š” ์—ฌ์ „ํžˆ "hi"

# ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ
a = "hi"
a = a.upper()  # a๋Š” ์ด์ œ "HI"


8๏ธโƒฃ ๋ฌธ์ž์—ด ์ธ์ฝ”๋”ฉ๊ณผ ๋””์ฝ”๋”ฉ

ํŒŒ์ด์ฌ 3์—์„œ ๋ฌธ์ž์—ด์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

# ๋ฌธ์ž์—ด ์ธ์ฝ”๋”ฉ (str -> bytes)
text = "์•ˆ๋…•ํ•˜์„ธ์š”"
encoded = text.encode('utf-8')  # b'\xec\x95\x88\xeb\x85\x95\xed\x95\x98\xec\x84\xb8\xec\x9a\x94'

# ๋ฌธ์ž์—ด ๋””์ฝ”๋”ฉ (bytes -> str)
decoded = encoded.decode('utf-8')  # '์•ˆ๋…•ํ•˜์„ธ์š”'

# ๋‹ค์–‘ํ•œ ์ธ์ฝ”๋”ฉ ์‚ฌ์šฉ
text.encode('euc-kr')  # EUC-KR ์ธ์ฝ”๋”ฉ
text.encode('cp949')   # CP949 ์ธ์ฝ”๋”ฉ (์œˆ๋„์šฐ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ)

# ์—๋Ÿฌ ์ฒ˜๋ฆฌ ์˜ต์…˜
text = "์•ˆ๋…•ํ•˜์„ธ์š”"
try:
    # 'ascii'๋Š” ํ•œ๊ธ€์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์—†์Œ
    text.encode('ascii')
except UnicodeEncodeError:
    print("ASCII๋กœ ์ธ์ฝ”๋”ฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค")
    
# ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐฉ์‹ ์ง€์ •
text.encode('ascii', errors='ignore')   # b'' (๋ณ€ํ™˜ ๋ถˆ๊ฐ€ ๋ฌธ์ž ๋ฌด์‹œ)
text.encode('ascii', errors='replace')  # b'?????' (๋ณ€ํ™˜ ๋ถˆ๊ฐ€ ๋ฌธ์ž ? ๋กœ ๋Œ€์ฒด)
text.encode('ascii', errors='xmlcharrefreplace')  # b'&#50504;&#45397;&#54616;&#49464;&#50836;' (XML ์—”ํ‹ฐํ‹ฐ๋กœ ๋Œ€์ฒด)

โœ… ๋ฌธ์ž ์ธ์ฝ”๋”ฉ ๊ด€๋ จ Tip:

  • UTF-8์€ ํ˜„๋Œ€์ ์ธ ์›น๊ณผ ์‹œ์Šคํ…œ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํ‘œ์ค€
  • ํ•œ๊ธ€ Windows์—์„œ๋Š” CP949(MS949) ์ธ์ฝ”๋”ฉ๋„ ํ”ํžˆ ์‚ฌ์šฉ๋จ
  • errors ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ธ์ฝ”๋”ฉ/๋””์ฝ”๋”ฉ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ์ง€์ • ๊ฐ€๋Šฅ
  • ํŒŒ์ผ์„ ์—ด ๋•Œ๋„ encoding ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ธ์ฝ”๋”ฉ ์ง€์ • ๊ฐ€๋Šฅ


9๏ธโƒฃ ๋ฐ”์ดํŠธ ๋ฌธ์ž์—ด๊ณผ ๋ณ€ํ™˜

Python 3์—์„œ๋Š” ๋ฐ”์ดํŠธ(bytes)์™€ ๋ฌธ์ž์—ด(str)์ด ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค.

# ๋ฐ”์ดํŠธ ๋ฆฌํ„ฐ๋Ÿด ์ƒ์„ฑ
b = b'hello'  # bytes ๊ฐ์ฒด
s = 'hello'   # str ๊ฐ์ฒด

# ๋ฐ”์ดํŠธ์™€ ๋ฌธ์ž์—ด ๋ณ€ํ™˜
bytes_obj = bytes('์•ˆ๋…•', 'utf-8')
str_obj = bytes_obj.decode('utf-8')

# 16์ง„์ˆ˜ ํ‘œํ˜„
bytes_obj.hex()  # 'ec9588eb8595'

# 16์ง„์ˆ˜ ๋ฌธ์ž์—ด์„ ๋ฐ”์ดํŠธ๋กœ ๋ณ€ํ™˜
bytes.fromhex('ec9588eb8595')  # b'\xec\x95\x88\xeb\x85\x95'

# ๋ฐ”์ดํŠธ ๋ฐฐ์—ด(์ˆ˜์ • ๊ฐ€๋Šฅํ•œ ๋ฐ”์ดํŠธ)
ba = bytearray(b'hello')
ba[0] = 72  # ASCII ์ฝ”๋“œ 'H'
ba  # bytearray(b'Hello')

โœ… ๋ฐ”์ดํŠธ ๋ฌธ์ž์—ด Tip:

  • ๋ฐ”์ดํŠธ(bytes)๋Š” 0-255 ์‚ฌ์ด์˜ ์ •์ˆ˜ ์‹œํ€€์Šค
  • str์€ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž์—ด์ด๋ฉฐ, bytes๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ
  • ๋„คํŠธ์›Œํฌ ํ†ต์‹ , ํŒŒ์ผ I/O ๋“ฑ์—์„œ ๋ฐ”์ดํŠธ ์ฒ˜๋ฆฌ ํ•„์š”
  • ๋ฐ”์ดํŠธ์™€ ๋ฌธ์ž์—ด ๊ฐ„ ๋ณ€ํ™˜์€ encode/decode ์‚ฌ์šฉ


๐Ÿ”Ÿ ์ •๊ทœํ‘œํ˜„์‹๊ณผ ๋ฌธ์ž์—ด

์ •๊ทœํ‘œํ˜„์‹์€ ๋ณต์žกํ•œ ๋ฌธ์ž์—ด ํŒจํ„ด์„ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

import re

# ํŒจํ„ด ๋งค์นญ
text = "The rain in Spain"
pattern = r"ai"
re.findall(pattern, text)  # ['ai', 'ai']

# ์ฒซ ๋ฒˆ์งธ ๋งค์น˜ ์ฐพ๊ธฐ
match = re.search(r"ai", text)
if match:
    print(match.group())  # 'ai'
    print(match.start())  # 5 - ๋งค์น˜ ์‹œ์ž‘ ์œ„์น˜
    print(match.end())    # 7 - ๋งค์น˜ ๋ ์œ„์น˜

# ํŒจํ„ด ๋ฐ”๊พธ๊ธฐ
re.sub(r"ai", "XX", text)  # 'The rXXn in SpXXn'

# ํŒจํ„ด์œผ๋กœ ๋ถ„ํ• 
re.split(r"\s", "Hello World Python")  # ['Hello', 'World', 'Python']

# ์ •๊ทœ์‹ ์ปดํŒŒ์ผ(์„ฑ๋Šฅ ํ–ฅ์ƒ)
pattern = re.compile(r"\d+")  # ํ•˜๋‚˜ ์ด์ƒ์˜ ์ˆซ์ž
pattern.findall("There are 123 apples and 456 oranges")  # ['123', '456']

# ๋‹ค์–‘ํ•œ ์ •๊ทœ์‹ ํŒจํ„ด
re.search(r"^\w+", "Hello, World!")  # ๋‹จ์–ด ๋ฌธ์ž๋กœ ์‹œ์ž‘
re.search(r"\d{2,4}", "Phone: 1234-5678")  # 2~4์ž๋ฆฌ ์ˆซ์ž
re.search(r"\b[A-Z][a-z]*\b", "Hello World")  # ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋‹จ์–ด

โœ… ์ •๊ทœ์‹ Tip:

  • r ์ ‘๋‘์‚ฌ(์›์‹œ ๋ฌธ์ž์—ด)๋ฅผ ์ •๊ทœ์‹ ํŒจํ„ด์— ์‚ฌ์šฉํ•˜๋ฉด ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ œ ๋ฐฉ์ง€
  • re.compile()๋กœ ์ •๊ทœ์‹ ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผํ•˜๋ฉด ์„ฑ๋Šฅ ํ–ฅ์ƒ
  • ์ž์ฃผ ์“ฐ๋Š” ํŒจํ„ด:
    • \d: ์ˆซ์ž, \w: ๋‹จ์–ด ๋ฌธ์ž, \s: ๊ณต๋ฐฑ ๋ฌธ์ž
    • *: 0ํšŒ ์ด์ƒ ๋ฐ˜๋ณต, +: 1ํšŒ ์ด์ƒ ๋ฐ˜๋ณต, ?: 0 ๋˜๋Š” 1ํšŒ ๋ฐœ์ƒ
    • []: ๋ฌธ์ž ํด๋ž˜์Šค, ^: ๋ฌธ์ž์—ด ์‹œ์ž‘, $: ๋ฌธ์ž์—ด ๋
    • \b: ๋‹จ์–ด ๊ฒฝ๊ณ„, .: ์ž„์˜์˜ ํ•œ ๋ฌธ์ž


์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜ ์ •๋ฆฌ:

  1. count(): ํŠน์ • ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜ ์„ธ๊ธฐ
  2. find()/index(): ์œ„์น˜ ์ฐพ๊ธฐ
  3. join(): ๋ฌธ์ž์—ด ์‚ฝ์ž…
  4. upper()/lower(): ๋Œ€์†Œ๋ฌธ์ž ๋ณ€ํ™˜
  5. strip(): ๊ณต๋ฐฑ ์ œ๊ฑฐ
  6. replace(): ๋ฌธ์ž์—ด ์น˜ํ™˜
  7. split(): ๋ฌธ์ž์—ด ๋ถ„๋ฆฌ
  8. startswith()/endswith(): ์‹œ์ž‘/๋ ๋ฌธ์ž์—ด ํ™•์ธ
  9. isalpha()/isdigit()/isalnum(): ๋ฌธ์ž์—ด ํƒ€์ž… ํ™•์ธ
  10. encode()/decode(): ์ธ์ฝ”๋”ฉ/๋””์ฝ”๋”ฉ


โš ๏ธ **GitHub.com Fallback** โš ๏ธ