πŸ§‘β€πŸ’» 파이썬 μ •κ·œν‘œν˜„μ‹

박은정·2021λ…„ 7μ›” 21일
0

μ •κ·œ ν‘œν˜„μ‹μ˜ μ •μ˜

μ •κ·œν‘œν˜„μ‹μ„ λ‚˜νƒ€λ‚΄λŠ” λ‹€μ–‘ν•œ μ˜μ–΄ν‘œν˜„
regular expression
regexp
regex
rational expression

νŠΉμ •ν•œ 문자의 κ·œμΉ™μ„ μ°Ύκ³  κ°€κ³΅ν•˜λŠ” 방법
μ΄λŠ” 파이썬뿐만 μ•„λ‹ˆλΌ C, C++, μžλ°” λ“±μ—μ„œ ν‘œμ€€ 라이브러리둜 μ œκ³΅ν•œλ‹€

μ •κ·œ ν‘œν˜„μ‹μ˜ ν•„μš”μ„±

μ—„μ²­λ‚˜κ²Œ κΈ΄ λ¬Έμžμ—΄μ—μ„œ νŠΉμ • κ·œμΉ™μ„ 가진 λ¬Έμžμ—΄μ„ μ°Ύκ±°λ‚˜
μ–΄λ–€ νŒ¨ν„΄μ„ 가진 문ꡬλ₯Ό 찾을 λ•Œμ— 도움이 λœλ‹€
예) μ–΄λ–€ κΈ€μ—μ„œ 이메일 μ£Όμ†Œ/μ „ν™”λ²ˆν˜Έ/인용된 ν•œμžμ˜ 이름 μΆ”μΆœ

μ •κ·œν‘œν˜„μ‹ μ—°μŠ΅ν•˜μž

μ •κ·œν‘œν˜„μ‹μ€ 곡식을 μ•„λŠ” κ²ƒλ§ŒμœΌλ‘œλŠ” λΆ€μ‘±ν•΄μ„œ
μ •κ·œν‘œν˜„μ‹μ˜ μ‚¬μš© 방법은 κ΅¬κΈ€μ—μ„œ 'μ •κ·œν‘œν˜„μ‹'을 κ²€μƒ‰ν•˜λ©΄ μ‰½κ²Œ 확인이 κ°€λŠ₯ν•˜λ‹€
μ •κ·œν‘œν˜„μ‹μ„ μ œλŒ€λ‘œ ν™œμš©ν•˜κ³  μ‹Άλ‹€λ©΄ μ–Έμ œλ‚˜ ν•œμͺ½μœΌλ‘œ μ •κ·œν‘œν˜„μ‹ 문법을 띄어 놓고
μ‘°κΈˆμ”©μ΄λΌλ„ μ—°μŠ΅ν•΄μ•Ό ν•œλ‹€

μ •κ·œ ν‘œν˜„μ‹ μ˜ˆμ‹œ : 인용된 ν•™μžμ˜ 이름 μΆ”μΆœ

# 1. μ •κ·œν‘œν˜„μ‹ λͺ¨λ“ˆ reλ₯Ό ν˜ΈμΆœν•œλ‹€
>>> import re 
>>> example = '이동민 κ΅μˆ˜λ‹˜μ€ λ‹€μŒκ³Ό 같이 μ„€λͺ…ν–ˆμŠ΅λ‹ˆλ‹€(이동민, 2019).
그런데 λ‹€λ₯Έ ν•™μžλŠ” 이 λ¬Έμ œμ— λŒ€ν•΄μ„œ λ‹€λ₯Έ 견해λ₯Ό 가지고 μžˆμ—ˆμŠ΅λ‹ˆλ‹€(졜재영, 2019).
또 λ‹€λ₯Έ 견해도 μžˆμ—ˆμŠ΅λ‹ˆλ‹€(Lion, 2018).'

# 2. μ•”ν˜Έμ²˜λŸΌ λ³΄μ΄μ§€λ§Œ 일단 μž…λ ₯!
>>> result = re.findall(r'\([A-Zz-zκ°€-힣]+, \d+\)', example)

# result에 μ›ν•˜λŠ” 값이 μ €μž₯λœλ‹€
>>> result
['(이동민, 2019)', '(졜재영, 2019)', '(Lion, 2018)']

πŸ“– μ •κ·œν‘œν˜„μ‹ λ©”νƒ€λ¬Έμž 더 μ•Œμ•„λ³΄κΈ°

μ •κ·œν‘œν˜„μ‹ νŒ¨ν„΄ μ°ΎκΈ°

νŒ¨ν„΄

νŒ¨ν„΄ : μ •κ·œμ‹μ„ μ»΄νŒŒμΌν•œ κ²°κ³Ό

λ¬Έμžμ—΄ 'life'μ—μ„œ 'life' μ΄λΌλŠ” νŒ¨ν„΄μ„ μ°Ύμ•„μ„œ λ°˜ν™˜

>>> re.match(r'Life', 'life').group()
'life'

맀칭되면 맀칭된 λ¬Έμžμ—΄ (μ—¬κΈ°μ„œλŠ” 'life')이 λ°˜ν™˜λœλ‹€
λ§€μΉ­λ˜μ§€ μ•ŠλŠ”λ‹€λ©΄ 였λ₯˜λ©”μ‹œμ§€κ°€ λœ¬λ‹€

## λ¬Έμžμ—΄ 'life' μ—μ„œ 'animal'μ΄λΌλŠ” νŒ¨ν„΄μ„ μ°Ύμ•„ λ°˜ν™˜ν•˜λΌ
>>> re.match(r'life', 'animal').group()
Tracback (most recent call last):
    File "<pyshelll30>", line 1, in <module>
        re.match(r'life', 'animal').group()
AttributeError: 'NoneType' object has no attribute 'group'

μ •κ·œν‘œν˜„μ‹μ—μ„œλŠ” '맀칭'을 μ°ΎλŠ” 것 match, search κ³Ό
그것을 'λ°˜ν™˜'ν•˜λŠ” 것 group, groups 은 λ³„κ°œμ˜ 과정이닀

μ •κ·œν‘œν˜„μ‹μ„ μ—°μŠ΅ν•˜λ €κ³  μ–΄λ–€ 원고 script에 νŠΉμ •ν•œ νŒ¨ν„΄μ΄ μžˆλŠ”μ§€
μ‰½κ²Œ 확인할 수 μžˆλŠ” 쑰건문을 λ§Œλ“€κΈ°λ„ ν•œλ‹€

>>> def refinder(pattern, script):
        if re.match(pattern, script):
            print('Match!')
        else:
           print('Not a match!')

matchλŠ” λŒ€μ†Œλ¬Έμž κ΅¬λΆ„ν•œλ‹€

νŒ¨ν„΄μ°ΎκΈ° μ˜ˆμ‹œ

  1. νŒ¨ν„΄μœΌλ‘œ r'Life' μž…λ ₯ : νŒ¨ν„΄μ— λ§žλŠ” λ¬Έμžμ—΄ 찾음
>>> pattern = r'life'
>>> script = "Life is so cool' # νŒ¨ν„΄μ„ 찾을 λ¬Έμžμ—΄ μž…λ ₯
>>> refinder(pattern, script) # μ›κ³ μ—μ„œ νŒ¨ν„΄ μ°ΎκΈ°
Match! # scriptμ—μ„œ νŒ¨ν„΄μ— λ§žλŠ” λ¬Έμžμ—΄ μ°Ύμ•˜λ‹€
  1. νŒ¨ν„΄μœΌλ‘œ r'life' μž…λ ₯ : νŒ¨ν„΄μ— λ§žλŠ” λ¬Έμžμ—΄ λͺ» 찾음
>>> pattern = r'life'
>>> script = "Life is so cool'
>>> refinder(pattern, script)
Not a match!

matchλŠ” ν…μŠ€νŠΈ 쀑간에 μžˆλŠ” νŒ¨ν„΄μ„ 찾지 λͺ»ν•œλ‹€

  1. νŒ¨ν„΄μœΌλ‘œ r'is' μž…λ ₯ : νŒ¨ν„΄μ— λ§žλŠ” λ¬Έμžμ—΄ λͺ» 찾음
>>> pettern = r'is'
>>> script = 'Life is so cool'
>>> refinder(pattern, script)
Not a match!

νŒ¨ν„΄μ„ μ°ΎλŠ” μ •κ·œν‘œν˜„μ‹

찾을 νŒ¨ν„΄μœΌλ‘œ ;life 와 같이 νŠΉμ •ν•œ λ¬Έμžμ—΄μ„ 직접 μž…λ ₯ν–ˆμ§€λ§Œ
μ΄λŸ¬ν•œ λ°©λ²•μœΌλ‘œλŠ” 같은 κ·œμΉ™μ„±μ„ κ°€μ§€μ§€λ§Œ λ‚΄μš©μ€ λ‹€λ₯Έ 문자λ₯Ό μ—¬λŸ¬ 개 μ°Ύμ•„λ‚Ό μˆ˜κ°€ μ—†λ‹€
κ·Έλž˜μ„œ μ •κ·œν‘œν˜„μ‹μ„ μ œλŒ€λ‘œ μ‚¬μš©ν•˜λ €λ©΄ μ •κ·œν‘œν˜„μ‹μœΌλ‘œ νŒ¨ν„΄μ„ ν‘œν˜„ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€

μ •κ·œν‘œν˜„μ‹ νŒ¨ν„΄λ§€μΉ˜μ„€λͺ…
\dμˆ«μžμ™€ 맀치[0-9]와 λ™μΌν•˜λ‹€
\Dμˆ«μžκ°€ μ•„λ‹Œ 것과 맀치[^0-9]와 λ™μΌν•˜λ‹€
\swhitespace λ¬Έμžμ™€ 맀치맨 μ•žμ˜ λΉˆμΉΈμ€ 곡백spaceλ₯Ό μ˜λ―Έν•œλ‹€
\Swhitespace λ¬Έμžκ°€ μ•„λ‹Œ 것과 맀치[^\t\n\f\v]와 λ™μΌν•˜λ‹€
\w문자+μˆ«μžμ™€ 맀치[a-zA-ZO-9_]와 λ™μΌν•˜λ‹€
\W문자+μˆ«μžκ°€ μ•„λ‹Œ λ¬Έμžμ™€ 맀치[^a-zA-ZO-9_]와 λ™μΌν•˜λ‹€
\\메타 λ¬Έμžκ°€ μ•„λ‹Œ 일반 문자 μ—­μŠ¬λž˜μ‹œ\와 λ§€μΉ˜λ©”νƒ€ 문자 μ•žμ— β‚©λ₯Ό 뢙이면 일반 문자λ₯Ό μ˜λ―Έν•œλ‹€

μ •κ·œν‘œν˜„μ‹μ„ μ„€λͺ…ν•˜λŠ” μ‚¬μ΄νŠΈμ—μ„œ μ°Ύμ•„κ°€λ©° ν™œμš©ν•˜λŠ” 것이 더 νš¨μœ¨μ μ΄λ‹€

profile
μƒˆλ‘œμš΄ 것을 λ„μ „ν•˜κ³  λ…Έλ ₯ν•œλ‹€

0개의 λŒ“κΈ€