[핵심기초] 파이썬에서 정규 표현식 이용하기
- 공유 링크 만들기
- 이메일
- 기타 앱
[핵심기초] 파이썬에서 정규 표현식 이용하기
1. 파이썬 Re모듈이 제공하는 Method 기능
- match(), search(), findall(), split(), sub() 등과 같이 다양한 함수를 제공합니다.
구분 | Method 종류 | 설명 |
검색 | re.match(RE, string) | 문자열의 시작 부분에서 RE가 일치하는지 판단합니다. |
re.search(RE, string) | 문자열을 읽어 RE가 일치하는 위치를 찾으습니다. | |
re.findall(RE,string) | RE가 일치하는 모든 부분 문자열을 찾아 리스트로 반환합니다. | |
re. finditer(RE,string) | RE가 일치하는 모든 부분 문자열을 찾아 iterators 로 반환합니다 | |
분리 | re.split(RE, string) | 문자열을 RE 패턴으로 쪼개어 리스트로 반환 합니다. |
대체 | re.sub(RE, SUB, string) | 문자열에서 RE 패턴의 문자열을 SUB 문자열로 대체합니다. |
* Iterators : https://www.w3schools.com/python/python_iterators.asp
import re
txt = "무궁화 꽃이 피었다, The Mugunghwa has bloomed."
x = re.search("^무궁화.*bloomed.$", txt)
if x:
print("YES! We have a match!")
else:
print("No match")
print(x)
# 결과
<re.Match object; span=(0, 38), match='무궁화 꽃이 피었다. The Mugunghwa has bloomed.'>
# .* : 앞의 문자가 0개 이상 반복
파이썬 Re모듈로 문자열의 인덱스 기능
- 찾는 문자열의 시작위치, 끝 위치, 포함하는 구간의 문자열의 인덱스를 리턴합니다.
Method 종류 | 설명 |
group() | RE와 일치하는 문자열을 반환합니다. |
start() | 일치의 시작 위치를 반환합니다 |
end() | 일치의 끝 위치를 반환합니다 |
span() | 일치의 (시작, 끝) 위치를 포함하는 튜플을 반환합니다. |
import re
txt="Isaac Newton, physicist"
m = re.match(r"(\w+) (\w+)", txt)
print("group.all:", m.group(0) ) # The entire match
print("group.first:", m.group(1) ) # The first parenthesized subgroup.
print("group.second:", m.group(2) ) # The second parenthesized subgroup.
print("group.multiple:", m.group(1, 2)) # Multiple arguments give us a tuple.
>>>>>>>>>>>>>>>
group.all: Isaac Newton
group.first: Isaac
group.second: Newton
group.multiple: ('Isaac', 'Newton')
3. 자주 사용하는 정규식
3.1 정규식 정의 방법
1) 슬래시 와 문장 패턴을 사용
const re = /ab+c/
2) RegExp 생성자 이용
const re = new RegExp( 'ab+c')
3.2 정규식에 사용하는 메타 문자들의 용도별 예시
정규식에서 사용하는 메타문자의 종류 : . ^ $ * + ? { } [ ] \ | ( ) 등과 같은 특수 문자들 입니다.
정규식에 포함되는 일부 문자들은 특수한 의미와 기능을 가진 메타 문자 (metacharacters)로 인식합니다. 일반적인 문자로서 인식 하려면 "₩." ₩^ ₩$ 등과 같이 역슬래쉬 다음의 문자는 원래의 문자로 인식을 합니다. 주로 정규식의 메타 문자는 Regular Expression에서 특정 문자의 반복이나 의미를 바꾸어 주도록 처리할 문자 검색과 대체 등에 활용이 됩니다.
`.` : 1개의 문자와 일치, 뉴라인(\n) 을 제외한 모든 문자를 의미
예) .{3} : 아무 문자 3개로 구성된 문자열을 의미 (F15, 0x0 등)
import re
pattern =r"gr.y"
string ="gray"
result = re.match(pattern, string)
print(result)
# <re.Match object; span=(0, 4), match='gray'>
`^` : 문자열이나 행의 처음을 의미, 문자열의 시작 패턴을 의미함
예) ^abc : abc로 시작하는 문자열을 의미 (abcd, abc12 등)
pattern =r"^gr.y"
string ="gray"
result = re.match(pattern, string)
`$` : 문자열을 마지막을 의미하고 종료 문자열의 패턴을 정의함
예) xyz$ : xyz로 종료되어야 함 (123xyz, strxyz 등)
pattern = r"gr.y$"
string = "gray"
result = re.match(pattern, string)
`*` : 앞 패턴이 0개 이상 반복됨을 의미
예) \d* : 숫자가 없거나 하나 이상인 문자열을 의미
pattern = r"go*gle"
string = "ggle"
result = re.match(pattern, string)
`+` : 앞 패턴이 최소 하나 이상 반복됨
예) \d+ : 숫자가 하나 이상 반복되는 문자열을 의미\
import re
pattern = r"go+gle"
string = "gogle"
result = re.match(pattern, string)
`?` : 앞 패턴이 없거나 정확히 하나의 문자를 의미함 (Optional 패턴을 정의할 때 사용)
예) \d? : 숫자가 하나 있거나 없어야 함
import re
pattern = r"go?gle"
string = "ggle"
result = re.match(pattern, string)
{n} : {n} 반복횟수가 정확히 n번, 패턴{n} 앞 패턴이 n번만 반복해서 나타나는 경우
예) \d{3} : 숫자가 3개 있어야 함
{n,} : {n,} 반복횟수가 n번 이상, 패턴{n,} 앞 패턴이 n번 이상 반복해서 나타나는 경우
예) \d{3,} : 숫자가 3개이상 이어야 함
{n,m} : {m, n} 반복 횟수 지정, 패턴{n, m} 앞 패턴이 최소 n번, 최대 m 번 반복해서 나타나는 경우 (n 또는 m 은 생략 가능)
예) \d{3,5} : 숫자가 3개, 4개 혹은 5개 있어야 함
import re
pattern =r"go{1,3}gle"
string ="googlegle"
result = re.match (pattern, string)
[]: [문자들] 괄호 안의 가능한 문자 들의 집합을 정의함
예) [Pp]ython : "Python" 혹은 "python"
import re
pattern =r"[abc]de"
pattern = r"[^abc]de"
string ="ade"
result = re.match (pattern, string)
`[^문자들]` : [문자들] 중에서 제외되는(피해야할) 문자들의 집합을 정의함.
예) [^aeiou] : 소문자 aeiou를 문자를 제외한 문자들 의미함
import re
pattern = r"[^abc]de"
string ="ade"
result = re.match (pattern, string)
() : 괄호안의 문자열을 그룹으로인식함
예) [(abc)f-z] : abcf, abcx abcz 등 과 같이 abc로 시작되는 문자열을 표현
`\` : '\' 뒤에오는 문자를 특수 문자로 인식을 합니다.
예) \\ 특수문자 '\' \. "."
`|` : 두 패턴 중 하나이어야 함 (OR 기능)
예) a | b : a 또는 b 를 나타냄
\A , \Z : \A 는 ^ 와 같고 \Z 는 $ 와 같음
3.3 정규식에서 사용하는 특수 시컨스
정규식의 문자처리를 좀더 쉽게 표현하기 위해서 메타 문자와 달리 역설래시와 알파벳 문자로 구성된 특스 시컨스는 특수한 의미를 부여합니다.
특수 시퀀스는 '\'로 시작하고 숫자(digit) 집합, 글자(letter) 집합 또는 공백이 아닌 모든 것의 집합과 같이 종종 유용한 미리 정의된 문자 집합을 나타냅니다.
\d :
숫자 0 ~ 9 \d\d\d : 0 ~ 9 범위의 숫자가 3개를 의미 (123, 000 등)
\w :
문자를 의미 \w\w\w : 문자가 3개를 의미 (xyz, ABC 등)
\s :
화이트 스페이스를 의미하는데, [\t\n\r\f] 와 동일 \s\s : 화이트 스페이스 문자 2개 의미 (\r\n, \t\t 등)
\d :
모든 십진 숫자와 일치합니다; 이것은 클래스 [0-9]와 동등합니다.
\D :
모든 비 숫자 문자와 일치합니다; 이것은 클래스 [^0-9]와 동등합니다.
\s :
모든 공백 문자와 일치합니다; 이것은 클래스 [ \t\n\r\f\v] 와 동등합니다.
\S :
모든 비 공백 문자와 일치합니다; 이것은 클래스 [^ \t\n\r\f\v] 와 동등합니다.
\w :
모든 영숫자(alphanumeric character)와 일치합니다; 이것은 클래스 [a-zA-Z0-9_]와 동등합니다.
\W :
모든 비 영숫자와 일치합니다; 이것은 클래스 [^a-zA-Z0-9_]와 동등합니다.
참고
https://docs.python.org/ko/3/howto/regex.html
댓글
댓글 쓰기