μ κ· ννμ
λ¬Έμμ΄μμ νΉμ ν ν¨ν΄μ μ°Ύκ±°λ λ체ν λ μ¬μ©νλ ν¨ν΄ κΈ°λ°μ λ¬Έμμ΄ ννμ
μ κ·ννμμ ν΅ν΄, μ¬μ©μκ° μ
λ ₯ν μμ΄λ(μλ¬Έ λλ νκΈ), λΉλ°λ²νΈ(μλ¬Έ+μ«μ+νΉμλ¬Έμ), μ΄λ©μΌ(xxx@xxx.com) λ±μ΄ μ ν¨ν λ°μ΄ν°μΈμ§ μ μ μ±μ νλ¨νλ λ°μ μ¬μ©λλ€.
μ κ· ννμ
λ¬Έμμ΄μ νΉμ ννλ₯Ό μ°Ύμλ΄κΈ° μν ν¨ν΄ ννμ
νμ΄μ¬μμλ μ κ·ννμμ μ¬μ©νκΈ° μν΄μ re λͺ¨λμ μ¬μ©ν©λλ€.
regular expression"μ μ€μλ§λ‘, "μ κ· ννμ"μ λνλ
λλ€.
νμ΄μ¬ μ κ· ννμ μ¬μ©μ μν΄ μμμΌ ν κ²
1.
μ κ·ννμ flag
2.
μ κ·ννμ κΈ°νΈ
3.
raw string
4.
re λͺ¨λμ ν¨μ
μ κ·ννμ flag
μ κ· ννμμμ νΉμ ν λμμ μννκΈ° μν΄μ μ¬μ©νλ λ¬Έμ
νλκ·Έ | μ€λͺ
|
i | λμλ¬Έμλ₯Ό ꡬλ³νμ§ μκ³ λ§€μΉν©λλ€. |
g | μ μ κ²μμ μνν©λλ€. λ¬Έμμ΄ λ΄μμ λͺ¨λ 맀μΉλ₯Ό μ°Ύμ΅λλ€. |
m | λ€μ€ ν λͺ¨λλ‘ μλν©λλ€. ^λ κ° μ€μ μμκ³Ό 맀μΉνκ³ , $λ κ° μ€ λκ³Ό 맀μΉν©λλ€. |
νλκ·Έ i
λμλ¬Έμ κ΅¬λΆ μμ΄, λ¬Έμμ΄μ ν¨ν΄μ 맀μΉνλ λ¬Έμμ
λλ€.
λμλ¬Έμ κ΅¬λΆ μμ΄ λ§€μΉ μμμ½λ
import re
# μ κ· ννμ
# - λ¬Έμμ΄ apple μ λμλ¬Έμ ꡬλΆμμ΄ λ§€μΉ
pattern = r'(?i)apple'
text_list = ['apple', 'Apple', 'APPLE', 'aPPle', 'app' ]
for text in text_list:
# re.match()λ‘ ν¨ν΄ νμΈ
match = re.match(pattern, text)
if match:
print("ν¨ν΄ 맀μΉβ : ", match.group())
else:
print("ν¨ν΄ 맀μΉβ")
Python
볡μ¬
μ€νκ²°κ³Ό
ν¨ν΄ 맀μΉβ : apple
ν¨ν΄ 맀μΉβ : Apple
ν¨ν΄ 맀μΉβ : APPLE
ν¨ν΄ 맀μΉβ : aPPle
ν¨ν΄ 맀μΉβ
Python
볡μ¬
νλκ·Έ g
λ¬Έμμ΄ μ μμ λν΄μ μΌμΉνλ ν¨ν΄μ μ°Ύλλ‘ μ§μ νλ λ¬Έμμ
λλ€.
μΌλ°μ μΈ νλ‘κ·Έλλ° μΈμ΄μμ βν¨ν΄/gβ νμμΌλ‘ μ μκ²μ ν¨ν΄μ μ¬μ©νμ§λ§,
νμ΄μ¬μμλ rβ(?g)ν¨ν΄β κ³Ό κ°μ νμμ μκ³ λμ findall() ν¨μλ‘ μ²λ¦¬νλ€.
μ μκ²μ μμμ½λ
import re
pattern = r'apple'
text = 'An apple a day keeps the doctor away. \n I love apples.'
# re.findall()λ‘ ν¨ν΄ κ²μ (μ μ κ²μ)
matches = re.findall(pattern, text, re.MULTILINE)
if matches:
for match in matches:
print("ν¨ν΄ 맀μΉβ : ", match)
else:
print("ν¨ν΄ 맀μΉβ")
Python
볡μ¬
βν¨ν΄/gβ findall()
: μ κ·ννμ g νλκ·Έλ νμ΄μ¬μμ findall() ν¨μλ‘ κ΅¬νλλ€.
β’
re.findall( ν¨ν΄, λ¬Έμμ΄, μ΅μ
)
ν΄λΉ λ¬Έμμ΄μ΄ ν¨ν΄μ 맀μΉλλ λ¬Έμμ΄λ€μ 리μ€νΈλ‘ λ°νν©λλ€.
μ΅μ
| λμ |
re.MULTILINE | - κ° μ€μ μμκ³Ό λμ λν΄ λ§€μΉλ₯Ό μννλ€.
- '^'μ '$' λ©ν λ¬Έμλ₯Ό μ¬μ©νμ¬ κ° μ€μ μμκ³Ό λμμ ν¨ν΄κ³Ό μΌμΉνλ λ¬Έμμ΄μ μ°Ύλλ€.
- μ£Όμ΄μ§ ν
μ€νΈκ° μ¬λ¬ μ€λ‘ μ΄λ£¨μ΄μ Έ μμ λ μ μ©νκ² μ¬μ©λλ€. |
re.DOTALL | - κ°ν λ¬Έμλ₯Ό ν¬ν¨νμ¬ λͺ¨λ λ¬Έμμ 맀μΉνλ€.
- '.' λ©ν λ¬Έμλ₯Ό μ¬μ©νμ¬ λͺ¨λ λ¬Έμμ 맀μΉνλ€.
- μ£Όμ΄μ§ ν
μ€νΈκ° κ°ν λ¬Έμλ₯Ό ν¬ν¨νκ³ μμ λ, κ°ν λ¬Έμλ₯Ό ν¬ν¨νμ¬ μ 체 ν
μ€νΈμμ ν¨ν΄μ μ°Ύλλ€. |
νλκ·Έ m
μ¬λ¬ μ€λ‘ μμ±λ λ¬Έμμ΄μ λνμ¬, μ¬λ¬ μ€ λͺ¨λμμ ν¨ν΄μ 맀μΉνλλ‘ νλ λ¬Έμμ
λλ€.
λ€μ€ νμ λ¬Έμμ΄μ λνμ¬, λ€μ€ ν λͺ¨λκ° μλ κ²½μ°μ λ€μ€ ν λͺ¨λλ₯Ό λΉκ΅νμ¬ μ΄ν΄ν΄λ³΄κ² μ΅λλ€.
λ€μ€ ν λͺ¨λκ° μλ κ²½μ°
import re
# (?m) λ€μ€νλͺ¨λ(MULTILINE)κ° μλ κ²½μ°
pattern = r'^apple'
text = '''apple - 첫째 μ€μ μ¬κ³Ό
apple - λμ§Έ μ€μ μ¬κ³Ό
'''
# re.findall()λ‘ ν¨ν΄ κ²μ (μ μ κ²μ)
matches = re.findall(pattern, text)
if matches:
for match in matches:
print("ν¨ν΄ 맀μΉβ : ", match)
else:
print("ν¨ν΄ 맀μΉβ")
Python
볡μ¬
μ€νκ²°κ³Ό
ν¨ν΄ 맀μΉβ : apple
Python
볡μ¬
^ κΈ°νΈλ μμνλ λΆλΆμ 맀μΉνλ ν¨ν΄ κΈ°νΈμ
λλ€.
1~2μ€ λͺ¨λ μμνλ λΆλΆμ apple μ΄ μμ§λ§, μ μμμ²λΌ λ€μ€ ν λͺ¨λκ° μλ κ²½μ°μλ λ¬Έμμ΄ μ 체μ λνμ¬ μμνλ λΆλΆμ΄ apple μΈ μ²« λ¬Έμ₯μ λν ν¨ν΄λ§ 맀μΉλ©λλ€.
λ€μ€ ν λͺ¨λ
import re
# (?m) λ€μ€ νλͺ¨λ
pattern = r'(?m)^apple'
text = '''apple - 첫째 μ€μ μ¬κ³Ό
apple - λμ§Έ μ€μ μ¬κ³Ό
'''
# re.findall()λ‘ ν¨ν΄ κ²μ
matches = re.findall(pattern, text)
if matches:
for match in matches:
print("ν¨ν΄ 맀μΉβ : ", match)
else:
print("ν¨ν΄ 맀μΉβ")
Python
볡μ¬
μ€νκ²°κ³Ό
ν¨ν΄ 맀μΉβ : apple
ν¨ν΄ 맀μΉβ : apple
Python
볡μ¬
λ€μ€ ν λͺ¨λλ₯Ό μ§μ νκΈ° μν΄μ, ν¨ν΄μ λ€μκ³Ό κ°μ΄ μ§μ ν©λλ€.
pattern = r'(?m)^apple'
Python
볡μ¬
(?m) λΆλΆμ΄ λ€μ€ ν λͺ¨λλ₯Ό μ§μ νλ λΆλΆμ
λλ€. μ€ν κ²°κ³Όλ₯Ό 보면 κ° νμ μμνλ λΆλΆμ λ¬Έμμ΄ apple μ 맀μΉνλ κ²μ λ³Ό μ μμ΅λλ€.
(?m) κΈ°νΈλ‘ λ€μ€ ν λͺ¨λλ₯Ό μ§μ ν μλ μμ§λ§, νμ΄μ¬μμ€λ findall() ν¨μμμ μ΅μ
μ μ§μ νμ¬ λ€μ€ ν λͺ¨λλ₯Ό μ€μ ν μλ μμ΅λλ€.
import re
# λ€μ€ νλͺ¨λ - re.MULTILINE
pattern = r'^apple'
text = '''apple - 첫째 μ€μ μ¬κ³Ό
apple - λμ§Έ μ€μ μ¬κ³Ό
'''
# re.findall()λ‘ ν¨ν΄ κ²μ
matches = re.findall(pattern, text, re.MULTILINE)
if matches:
for match in matches:
print("ν¨ν΄ 맀μΉβ : ", match)
else:
print("ν¨ν΄ 맀μΉβ")
Python
볡μ¬
μμ μμμμλ findall() ν¨μμμ λ€μ€ ν λͺ¨λλ₯Ό μλμ κ°μ΄ μ§μ ν©λλ€.
re.findall(pattern, text, re.MULTILINE)
Python
볡μ¬
λ€μ€ ν λͺ¨λ μ μ© λ°©λ²
1.
μ κ· ννμ ν¨ν΄μ μ§μ νκΈ°
pattern = r'(?m)^apple'
Python
볡μ¬
2.
ν¨μμ μ΅μ
μΌλ‘ μ§μ νκΈ°
re.findall(pattern, text, re.MULTILINE)
Python
볡μ¬
μ κ· ννμ κΈ°νΈ
μ κ· ννμ μμμ μ¬μ©λλ κΈ°νΈλ€μ
λλ€.
미리 μ½μλ λ¬Έμ λ° κΈ°νΈλ₯Ό μ¬μ©νμ¬ μλ¬Έ, μ«μ, κΈμ μ λ±μ ννν©λλ€.
ꡬ문 | μ€λͺ
| μμ |
λ¬Έμ | μΌλ° λ¬Έμλ μμ²΄λ‘ λ§€μΉλ©λλ€. | abcλ "abc"μ λ§€μΉ |
. | μ΄λ€ λ¬Έμ νλμ 맀μΉλ©λλ€. | a.cλ "abc"μ λ§€μΉ |
\d | μ«μ(digit)μ 맀μΉλ©λλ€. | \d+λ "123"μ λ§€μΉ |
\D | μ«μκ° μλ λ¬Έμμ 맀μΉλ©λλ€. | \D+λ "abc"μ λ§€μΉ |
\w | λ¬Έμ(word character)μ 맀μΉλ©λλ€. | \w+λ "hello"μ λ§€μΉ |
\W | λ¬Έμκ° μλ λ¬Έμμ 맀μΉλ©λλ€. | \W+λ "123!"μ λ§€μΉ |
\s | 곡백 λ¬Έμμ 맀μΉλ©λλ€. | \s+λ " \t\n"μ λ§€μΉ |
\S | κ³΅λ°±μ΄ μλ λ¬Έμμ 맀μΉλ©λλ€. | \S+λ "abc123"μ λ§€μΉ |
^ | λ¬Έμμ΄μ μμκ³Ό 맀μΉλ©λλ€. | ^abcλ "abcdef"μ 맀μΉνμ§ μμ |
$ | λ¬Έμμ΄μ λκ³Ό 맀μΉλ©λλ€. | xyz$λ "xyz123"μ 맀μΉνμ§ μμ |
[abc] | λκ΄νΈ μμ μ΄λ€ λ¬Έμ(a, b, c)μ 맀μΉλ©λλ€. | [aeiou]λ "apple"μμ "a"μ λ§€μΉ |
[^abc] | λκ΄νΈ μμ μ΄λ€ λ¬Έμ(a, b, c)λ₯Ό μ μΈν λ¬Έμμ 맀μΉλ©λλ€. | [^aeiou]λ "apple"μμ "p", "l" λ±κ³Ό λ§€μΉ |
[a-z] | aλΆν° zκΉμ§ λ²μμ λ¬Έμμ 맀μΉλ©λλ€. | [a-z]+λ "hello"μμ "hello"μ λ§€μΉ |
(x) | κ·Έλ£Ήμ λνλ΄λ©°, xλ₯Ό 맀μΉν©λλ€. | (abc)+λ "abcabc"μ λ§€μΉ |
x|y | x λλ y 맀μΉν©λλ€ | x|y λ βxβ λλ βyβ μ λ§€μΉ |
x? | xκ° 0 λλ 1ν λνλ λ 맀μΉν©λλ€. | ab?cλ "abc"μ "ac"μ λ§€μΉ |
x* | xκ° 0ν μ΄μ λνλ λ 맀μΉν©λλ€. | ab*cλ "ac", "abc", "abbc" λ±κ³Ό λ§€μΉ |
x+ | xκ° 1ν μ΄μ λνλ λ 맀μΉν©λλ€. | ab+cλ "abc", "abbc" λ±κ³Ό λ§€μΉ |
x{m} | xκ° μ νν mν λνλ λ 맀μΉν©λλ€. | a{2}λ "aa"μ λ§€μΉ |
x{m, n} | xκ° μ΅μ mνμμ μ΅λ nνκΉμ§ λνλ λ 맀μΉν©λλ€. | a{1,3}λ "a", "aa", "aaa"μ λ§€μΉ |
x{m,} | xκ° μ΅μ mν μ΄μ λνλ λ 맀μΉν©λλ€. | a{2,}λ "aa", "aaa" λ±κ³Ό λ§€μΉ |
x | y | x λλ yμ 맀μΉλ©λλ€. |
raw string
μΌλ°μ μΈ λ¬Έμμ΄κ³Ό λ€λ₯΄κ², μ΄μ€μΌμ΄ν λ¬Έμ (λ°±μ¬λμ(\)λ₯Ό νΉλ³ν μλ―Έλ‘ μ¬μ©)λ₯Ό μλ κ·Έλλ‘ μΆλ ₯νλλ‘ νμ ν΄μ£Όλ λ¬Έμμ΄
μΌλ°μ μΌλ‘ \(λ°±μ¬λμ) λ νλ‘κ·Έλλ°μ λ¬Έμμ΄μμ νΉμ κΈ°λ₯μΌλ‘ νμ©λ©λλ€.
β’
\n : κ°ν
β’
\t : ν
β’
β¦
μμ κ°μ΄ \(λ°±μ¬λμ) λ‘ μμλλ κΈ°νΈλ μ΄μ€μΌμ΄ν λ¬ΈμλΌκ³ λΆλ₯΄λ©°, νΉλ³ν κΈ°λ₯μ ν©λλ€.
νμ§λ§, μ κ· ννμμμλ μ΄λ₯Ό ν¨ν΄μΌλ‘ μ μ©νμ¬ μ¬μ©ν΄μΌνκΈ° λλ¬Έμ, μ΄μ€μΌμ΄ν λ¬Έμμ κΈ°λ₯μ λΉνμ±ν μμΌμΌν©λλ€.
λ€μκ³Ό κ°μ΄ μ΄μ€μΌμ΄ν λ¬Έμμ κΈ°λ₯μ λΉνμ±ν μμΌ raw string μ μ¬μ©ν©λλ€.
r'λ¬Έμμ΄'
Python
볡μ¬
νμ΄μ¬μμ μ κ·ννμμ raw string νμμΌλ‘ μμ±ν©λλ€.
re λͺ¨λμ ν¨μ
ν¨μ | μ€λͺ
|
re.match() | λ¬Έμμ΄μ μμλΆν° ν¨ν΄κ³Ό μΌμΉνλμ§ κ²μ¬νλ€. |
re.search() | λ¬Έμμ΄ μ 체μμ ν¨ν΄κ³Ό μΌμΉνλ 첫 λ²μ§Έ μμΉλ₯Ό κ²μνλ€. |
re.findall() | λ¬Έμμ΄ μ 체μμ ν¨ν΄κ³Ό μΌμΉνλ λͺ¨λ λΆλΆμ μ°Ύμ 리μ€νΈλ‘ λ°ννλ€. |
re.finditer() | λ¬Έμμ΄ μ 체μμ ν¨ν΄κ³Ό μΌμΉνλ λͺ¨λ λΆλΆμ λ°λ³΅ κ°λ₯ν κ°μ²΄λ‘ λ°ννλ€. |
re.split() | ν¨ν΄μ κΈ°μ€μΌλ‘ λ¬Έμμ΄μ λΆν νμ¬ λ¦¬μ€νΈλ‘ λ°ννλ€. |
re.sub() | λ¬Έμμ΄μμ ν¨ν΄κ³Ό μΌμΉνλ λΆλΆμ λ€λ₯Έ λ¬Έμμ΄λ‘ λ체νλ€. |
re.compile() | μ κ· ννμ ν¨ν΄μ μ»΄νμΌνμ¬ μ¬μ¬μ©ν μ μλ κ°μ²΄λ‘ λ°ννλ€. |
μμ
β’
μμ΄λ νμ 체ν¬
β’
λΉλ°λ²νΈ νμ 체ν¬
β’
μ νλ²νΈ νμ 체ν¬
β’
μ΄λ©μΌ νμ 체ν¬
μμ΄λ νμ 체ν¬
import re
def check_username(username):
pattern = r'^[a-zA-Z0-9_-]{4,16}$'
if re.match(pattern, username):
return True
else:
return False
# ν
μ€νΈ
username = "user123"
if check_username(username):
print("μ ν¨ν μμ΄λμ
λλ€.")
else:
print("μ ν¨νμ§ μμ μμ΄λμ
λλ€.")
Python
볡μ¬
λΉλ°λ²νΈ νμ 체ν¬
import re
def check_password(password):
pattern = r'^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$'
if re.match(pattern, password):
return True
else:
return False
# ν
μ€νΈ
password = "Password123"
if check_password(password):
print("μ ν¨ν λΉλ°λ²νΈμ
λλ€.")
else:
print("μ ν¨νμ§ μμ λΉλ°λ²νΈμ
λλ€.")
Python
볡μ¬
μ νλ²νΈ νμ 체ν¬
import re
def check_phone_number(phone_number):
pattern = r'^\d{3}-\d{3,4}-\d{4}$'
if re.match(pattern, phone_number):
return True
else:
return False
# ν
μ€νΈ
phone_number = "010-1234-5678"
if check_phone_number(phone_number):
print("μ ν¨ν μ νλ²νΈμ
λλ€.")
else:
print("μ ν¨νμ§ μμ μ νλ²νΈμ
λλ€.")
Python
볡μ¬
μ΄λ©μΌ νμ 체ν¬
import re
def check_email(email):
pattern = r'^[a-zA-Z0-9+._-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
if re.match(pattern, email):
return True
else:
return False
# ν
μ€νΈ
email = "example@example.com"
if check_email(email):
print("μ ν¨ν μ΄λ©μΌ μ£Όμμ
λλ€.")
else:
print("μ ν¨νμ§ μμ μ΄λ©μΌ μ£Όμμ
λλ€.")
Python
볡μ¬