λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
🧬 Biology/λ°”μ΄μ˜€ μ½”λ”© 문제

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

by HelloRabbit 2023. 5. 23.
728x90

Goal

1. μ •κ·œν‘œν˜„μ‹μ΄λž€?
2. νŒŒμ΄μ¬μ—μ„œ μ •κ·œν‘œν˜„μ‹ μ“°λŠ” 방법 μ•Œμ•„λ³΄κΈ°

 

μ •κ·œν‘œν˜„μ‹μ΄λž€?

μ •κ·œν‘œν˜„μ‹ (Regular expression)은 ν…μŠ€νŠΈμ—μ„œ νŒ¨ν„΄ μ°ΎκΈ°λ₯Ό ν•  λ•Œ μœ μš©ν•œ 도ꡬ이닀. 예λ₯Ό λ“€μ–΄ μ—¬λŸ¬ RNA μ„œμ—΄ 쀑 "AUG"κ°€ 포함 된 μ„œμ—΄λ§Œ 좜λ ₯ν•˜κ³  μ‹Άλ‹€λ©΄ μ •κ·œν‘œν˜„μ‹μ„ μ¨μ„œ μ•„μ£Ό κ°„λ‹¨ν•˜κ²Œ 찾을 수 μžˆλ‹€.

 

파이썬의 μ •κ·œν‘œν˜„μ‹

νŒŒμ΄μ¬μ—μ„œλŠ” re λΌλŠ” 라이브러리λ₯Ό μ΄μš©ν•œλ‹€.

re λͺ¨λ“ˆμ˜ λ©”μ„œλ“œ κΈ°λŠ₯ μ˜ˆμ‹œ
findall("νŒ¨ν„΄", λ¬Έμžμ—΄) νŒ¨ν„΄μ΄ μΌμΉ˜ν•˜λŠ” λͺ¨λ“ κ±Έ 리슀트 ν˜•νƒœλ‘œ λ°˜ν™˜ 
import re

rna = "AUGCCAUGCUGA"
first_start = re.search("AUG", rna)
print(first_start)  # <re.Match object; span=(0, 3), match='AUG'>
search("νŒ¨ν„΄", λ¬Έμžμ—΄) νŒ¨ν„΄μ΄ μΌμΉ˜ν•˜λŠ” 뢀뢄을 object ν˜•νƒœλ‘œ λ°˜ν™˜
import re

rna = "AUGCCAUGCUGA"
start_codons = re.findall("AUG", rna)
print(start_codons)  # ['AUG', 'AUG']
split("νŒ¨ν„΄", λ¬Έμžμ—΄, λͺ‡λ²ˆκΉŒ) νŒ¨ν„΄μ΄ μΌμΉ˜ν•˜λŠ” 뢀뢄을 κΈ°μ€€μœΌλ‘œ ν…μŠ€νŠΈλ₯Ό λ‚˜λˆ„μ–΄ 리슀트둜 λ°˜ν™˜
mport re

rna = "AUGCCAUGCUGA"
gc_split = re.split("GC", rna)
print(gc_split)  # ['AU', 'CAU', 'UGA']

one_gc_split = re.split("GC", rna, 1)
print(one_gc_split)  # ['AU', 'CAUGCUGA']
sub("λ°”κΎΈκ³ μ‹Άμ€νŒ¨ν„΄", "λ°”κΎΌν›„", λ¬Έμžμ—΄) νŒ¨ν„΄μ΄ μΌμΉ˜ν•˜λŠ” 뢀뢄을 λ‹€λ₯Έ ν…μŠ€νŠΈλ‘œ λ°”κΏ”μ„œ 반
import re

rna = "AUGCCAUGCUGA"
dna = re.sub("U", "T", rna)
print(dna)  # ATGCCATGCTGA

 

νŒ¨ν„΄μœΌλ‘œ μ“Έ 수 μžˆλŠ” 것도 맀우 λ‹€μ–‘ν•˜λ‹€. λͺ‡κ°€μ§€ 많이 μ‚¬μš©ν•˜λŠ” κ²ƒλ§Œ μ •λ¦¬ν•˜μžλ©΄...

νŒ¨ν„΄ 뜻 μ˜ˆμ‹œ
μ˜ˆμ‹œ
. \n λΉΌκ³  λͺ¨λ‘ λ‹€ 됨 b.d 'bad', 'bed', 'bid', 'bud' 등등이 λ‹€ 맀치됨
^ [μœ„μΉ˜] μ‹œμž‘ν•˜λŠ” 문자 ^AUG 'AUG'둜 μ‹œμž‘ν•˜λŠ” λ¬Έμžμ—΄ 맀치됨
$ [μœ„μΉ˜] λλ‚˜λŠ” 문자 UGA$ 'UGA둜 λλ‚˜λŠ” λ¬Έμžμ—΄ 맀치됨
* [개수] 0 μ΄μƒμ˜ 개수만큼 TA* 'T', 'TA',  'TAA', 'TAAAA' 등등이 λ‹€ 맀치됨
+ [개수] 1 μ΄μƒμ˜ 개수만큼 TA+ 'TA', 'TAA', 'TAAAAAA' 등등이 λ‹€ 맀치됨
? [개수] 1개 μ—†κ±°λ‚˜ μžˆκ±°λ‚˜ TA? 'T' λ˜λŠ” 'TA' 만 맀치됨
\ νŒ¨ν„΄μœΌλ‘œ μ‚¬μš©ν•˜λŠ”κ±Έ λ§€μΉ˜ν•˜κ²Œ μ‚¬μš©ν•˜κ³  싢을 λ•Œ
예λ₯Ό λ“€μ–΄, "?"κ°€ λ“€μ–΄κ°€ μžˆλŠ”μ§€ 보고 싢은데 "?"λŠ” μœ„μ—μ„œ μ„€λͺ…ν•˜μ˜€λ“―이 개수λ₯Ό λœ»ν•˜λŠ” νŒ¨ν„΄μ΄λ‹€. 그럴 λ•Œ "\?"λ₯Ό μ“°λ©΄ λ¬ΌμŒν‘œλ₯Ό 찾을 수 μžˆλ‹€.
/? '?' κ°€ 맀치됨
[ ] - λ„€λͺ¨ κ΄„ν˜Έ μ•ˆμ— μžˆλŠ” 것 쀑 μ•„λ¬΄κ±°λ‚˜ 맀치되면 될 λ•Œ
- νŠΉμ • λ²”μœ„λ₯Ό λ‚˜νƒ€λ‚Ό λ•Œ
[abc]  'a', 'b', λ˜λŠ” 'c'λ₯Ό 맀치 μ‹œν‚΄
[a-z] μ•ŒνŒŒλ²³ 맀치 μ‹œν‚¬ λ•Œ
[0-9] 숫자 맀치 μ‹œν‚¬ λ•Œ
| λ˜λŠ” (UGA|UAG|UAA) 'UGA', 'UAG', 'UAA' μ…‹ 쀑 ν•˜λ‚˜λ₯Ό 맀치 μ‹œν‚¬ λ•Œ
(μž‘μ€ κ΄„ν˜ΈλŠ” 그룹된 κ²ƒλ“€λ§Œ λ§€μΉ˜μ‹œν‚΄)
\n κ°œν–‰λ¬Έμž. μ—”ν„° μ³μ„œ 쀄 λ„˜μ–΄κ°€λŠ”κ±Έ λ‚˜νƒ€λƒ„ \n 'abc
def
ghi'
μ΄λ ‡κ²Œ 쀄이 λ„˜μ–΄κ°„ 뢀뢄듀을 맀치 μ‹œν‚΄

 

μœ„μ— νŒ¨ν„΄λ“€ 이외에도 μ—„μ²­ 많기 λ•Œλ¬Έμ— 잘 μˆ™μ§€ν•΄λ‘λ©΄ μ •κ·œν‘œν˜„μ‹μ„ 더 잘 ν™œμš©ν•  수 μžˆκ² λ‹€! 😊 

 

μ°Έκ³ 

https://docs.python.org/3/library/re.html

 

 

 

λŒ“κΈ€