μ κ·ννμμ λνλ΄λ λ€μν μμ΄νν
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λ λμλ¬Έμ ꡬλΆνλ€
r'Life'
μ
λ ₯ : ν¨ν΄μ λ§λ λ¬Έμμ΄ μ°Ύμ>>> pattern = r'life'
>>> script = "Life is so cool' # ν¨ν΄μ μ°Ύμ λ¬Έμμ΄ μ
λ ₯
>>> refinder(pattern, script) # μκ³ μμ ν¨ν΄ μ°ΎκΈ°
Match! # scriptμμ ν¨ν΄μ λ§λ λ¬Έμμ΄ μ°Ύμλ€
r'life'
μ
λ ₯ : ν¨ν΄μ λ§λ λ¬Έμμ΄ λͺ» μ°Ύμ>>> pattern = r'life'
>>> script = "Life is so cool'
>>> refinder(pattern, script)
Not a match!
matchλ ν μ€νΈ μ€κ°μ μλ ν¨ν΄μ μ°Ύμ§ λͺ»νλ€
r'is'
μ
λ ₯ : ν¨ν΄μ λ§λ λ¬Έμμ΄ λͺ» μ°Ύμ>>> pettern = r'is'
>>> script = 'Life is so cool'
>>> refinder(pattern, script)
Not a match!
μ°Ύμ ν¨ν΄μΌλ‘ ;life
μ κ°μ΄ νΉμ ν λ¬Έμμ΄μ μ§μ μ
λ ₯νμ§λ§
μ΄λ¬ν λ°©λ²μΌλ‘λ κ°μ κ·μΉμ±μ κ°μ§μ§λ§ λ΄μ©μ λ€λ₯Έ λ¬Έμλ₯Ό μ¬λ¬ κ° μ°ΎμλΌ μκ° μλ€
κ·Έλμ μ κ·ννμμ μ λλ‘ μ¬μ©νλ €λ©΄ μ κ·ννμμΌλ‘ ν¨ν΄μ ννν μ μμ΄μΌ νλ€
μ κ·ννμ ν¨ν΄ | λ§€μΉ | μ€λͺ |
---|---|---|
\d | μ«μμ λ§€μΉ | [0-9] μ λμΌνλ€ |
\D | μ«μκ° μλ κ²κ³Ό λ§€μΉ | [^0-9] μ λμΌνλ€ |
\s | whitespace λ¬Έμμ λ§€μΉ | 맨 μμ λΉμΉΈμ 곡백space λ₯Ό μλ―Ένλ€ |
\S | whitespace λ¬Έμκ° μλ κ²κ³Ό λ§€μΉ | [^\t\n\f\v] μ λμΌνλ€ |
\w | λ¬Έμ+μ«μ μ λ§€μΉ | [a-zA-ZO-9_] μ λμΌνλ€ |
\W | λ¬Έμ+μ«μ κ° μλ λ¬Έμμ λ§€μΉ | [^a-zA-ZO-9_] μ λμΌνλ€ |
\\ | λ©ν λ¬Έμκ° μλ μΌλ° λ¬Έμ μμ¬λμ\ μ λ§€μΉ | λ©ν λ¬Έμ μμ β© λ₯Ό λΆμ΄λ©΄ μΌλ° λ¬Έμλ₯Ό μλ―Ένλ€ |
μ κ·ννμμ μ€λͺ νλ μ¬μ΄νΈμμ μ°Ύμκ°λ©° νμ©νλ κ²μ΄ λ ν¨μ¨μ μ΄λ€