2021. 1. 4. 17:26ㆍProgramming Language/Python
정규표현식
문자열에 특정한 규칙이 있는 경우,
해당 규칙을 식으로 정의하여 규칙에 맞는 문자열들을 추출할 때 사용하는 기능
정규표현식 확인 사이트
https://regexr.com/: 정규표현식을 만들 때 입력하면 텍스트에서 패턴이 일치하는 부분을 하이라이트 표시해준다.
메타 문자(Meta Characters)
정규표현식에서 사용하는 메타문자는 다음과 같다.
. ^ $ * + ? { } [ ] \ | ( )
문자 클래스 []
문자 클래스로 만들어진 정규식은 "[ ] 사이의 문자들과 매치"
라는 의미를 갖는다.
문자 클래스를 만드는 문자인 [] 사이에는 어떤 문자도 들어갈 수 있다.
즉 정규표현식이 [abc]라면 이 표현식의 의미는 "a,b,c 중 한 개의 문자와 매치"를 뜻한다.
매치 란 무엇을 의미할까? [abc]에 대해 "a", "before", "dude"를 살펴보면,
- "a"는 정규식과 일치하는 문자인 "a"가 있으므로 매치
- "before"는 정규식과 일치하는 문자인 "b"가 있으므로 매치
- "dude"는 정규식과 일치하는 문자인 a,b,c중 어느 하나도 포함하고 있지 않으므로 매치되지 않음
[]안의 두 문자 사이에 하이픈(-)을 사용하면 두 문자 사이의 범위를 나타낸다. 예를들어, [0-9]
는 0123456789
를 의미한다(숫자).
-
[0-9]
: 숫자 -
[a-zA-z]
: 알파벳 모두 -
\d
: 숫자.[0-9]
와 동일 -
\D
: 숫자가 아닌 것.[^0-9
와 동일 -
\s
: whitespace 문자와 매치,[ \t\n\r\f\v]
와 동일한 표현식이다. 맨 앞의 빈칸은 공백문자(space) 의미. -
\S
: whitespace 문자가 아닌 것과 매치.[^ \t\n\r\f\v]
와 동일 -
\w
: 문자+숫자와 매치,[a-zA-Z0-9_]
와 동일 -
\W
: 문자+숫자 가 아닌 것과 매치.[^a-zA-Z0-9_]
와 동일한 표현식대문자는 소문자의 반대를 뜻한다.
Dot(.)
정규표현식의 Dot(.)메타 문자는 줄바꿈 문자인 \n
을 제외한 모든 문자와 매치됨을 의미
a.b
위 정규식은 "a + 모든 문자 +b"
를 의미한다.
a.b
는ab
와 매치되지 않는다. a와 b 사이에 어떤 문자라도 하나는 있어야 한다.
반복(*)
*
은 *
바로 앞에 있는 문자가 0부터 무한대로 반복 될 수 있다는 의미이다.
반복(+)
*
와 달리 최소 1번은 반복되어야 한다.
반복({m,n}, ?)
{}
메타문자를 사용하면 반복 횟수를 고정 할 수 있다.
{1,}
은+
와,{0,}
은*
와 동일
?
은 있어도 되고 없어도 된다는 의미이다.
파이썬의 re모듈
파이썬은 정규 표현식을 지원하기 위해 re(regular expression)모듈을 제공한다.
import re
p = re.compile('ab*') # 예시이다.
이렇게 정규 표현식을 컴파일 한다. re.compile의 결과로 돌려주는 객체p(컴파일 된 패턴 객체)를 사용하여 그 이후의 작업을 수행 할 것이다.
- 패턴이란 정규식을 컴파일 한 결과이다.
파이썬의 메소드
-
match(): 문자열의 처음부터 정규식과 매치되는 지 조사.
-
search(): 문자열 전체를 검색하여 정규식과 매치되는지 조사.
-
findall(): 정규식과 매치되는 모든 문자열을 리스트로 리턴
-
finditer(): 정규식과 매치되는 모든 문자열을 반복 가능한 객체로 리턴.
match, search는 매치되지 않을 때 None을 리턴한다.
import re
p = re.compile('[a-d]')
str = "Hello World"
m = p.match(str)
print(m)
결과
None
import re
p = re.compile('[a-z]+')
str = "python"
m = p.match(str)
print(m)
결과
<re.Match object; span=(0, 6), match='python'>
import re
p = re.compile('[a-d]')
str = "Hi, my name is Yuseon"
m = p.search(str)
print(m)
결과
<re.Match object; span=(8, 9), match='a'>
match()
와search()
는 문자열의 처음부터인지 아닌지 구분하여 사용
문제풀이에 사용 될 것 같은 내용을 정리했고,
https://wikidocs.net/4308 의 내용을 참고했으니 더 알고싶다면 이 링크에서 보면 되겠다.
'Programming Language > Python' 카테고리의 다른 글
[Python] collections.OrderedDict 정렬 (0) | 2021.01.05 |
---|---|
[Python] 리스트에 특정 값이 있는지 체크하기 (0) | 2021.01.05 |
[Python] split() (0) | 2021.01.04 |
[Python] isalnum(), isalpha() 함수 (0) | 2021.01.04 |
[python] 람다 표현식 (0) | 2021.01.01 |