일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 커밋
- Thailand
- commit
- 바다
- 스튜디오
- 꿀단지스튜디오
- 태국
- Photo
- snap
- 사진
- checkout
- Street
- Thai
- Studio
- honeyJarStudio
- 스냅
- 촬영
- REST
- 파타야
- 체크아웃
- travel
- Sea
- 여행
- Photograph
- honeyJar
- 여름휴가
- pattaya
- revision
- 리비전
- svn
- Today
- Total
꽃무늬 키보드
정규식_메타문자와 문자열 매칭 본문
정규식?
정규식은 복잡한 문자열 패턴을 조사하고 규칙을 정의하는 문자열이다.
python에서 정규식은 re모듈로 제공된다.
메타 문자
1. 반복 메타 문자
정규식은 문자나 문자 패턴의 반복을 나타내기 위한 메타 문자가 존재한다. 지정된 횟수만큼
앞의 문자나 패턴의 반복을 허용한다.
반복 메타 문자 | 의미 | 예시 |
* | 0회 이상 반복 | ab*c는 ac, abc, abbc, abbbbbc 등과 매치 |
+ | 1회 이상 반복 | ab+c는 abc, abbbbc 등과 매치 |
? | 0회 혹은 1회 | ab?c는 ac, abc와 매치 |
{m} | m회 반복 | ab{2}는 abb와 매치 |
{m,n} | m회부터 n회까지 반복 | ab{2,4}는 abb |
2. 매칭 메타 문자
정규식을 표현하기 위한 매칭 메타 문자는 다음과 같다.
매칭 메타 문자 | 의미 |
. | 줄바꿈 문자를 제외한 모든 문자와 매치 re.DOTALL 모드 사용시 줄바꿈 문자도 매치 |
^ | 문자열의 시작과 매치 re.MULTILINE 모드 사용 시 각 라인의 시작과 매치 [] 메타 기호 안에서는 반대의 문자열과 매치. 즉 [^2]는 2가 아닌 문자 |
$ | 문자열의 마지막과 매치 [] 메타 기호 안에서는 순수한 $문자로 매치 |
[] | 문자 집합을 나타낸다. [abc]는 'a', 'b','c'중 한 문자이며 [a-c]와 같이 범위를 타나내 사용할 수 있다. [a-zA-Z0-9]는 영문자 숫자를 의미 |
| | a|b는 a 또는 b 의 의미다 |
() | 정규식을 그룹으로 묶는다 |
매칭
1. 문자열 매치
re.match 함수는 문자열이 매치된 경우 Match 객체를 리턴하고 매치되지 않을 경우 리턴
값이 없다. 실제로는 None 객체를 리턴하게 된다.
>>> re.match('[0-9]', '12345') <_sre.SRE_Match object at 0x02A17BB8> |
2. 매치된 문자열 추출
re.group() 함수를 이용해 매치된 문자열을 추출한다.
>>> m = re.match('[0-9]','12345') >>> m.group() '1'
>>> m = re.match('[0-9]+','12345abc') >>> m.group() '12345'
>>> m = re.match('[0-9]+','12345 ') >>> m.group() '12345'
>>> m.group() ' 12345' |
* 이스케이프 기호
분야 | 설명 |
\\ | 역슬래쉬 문자 자체를 의미 |
\d | 모든 숫자와 매치 [0-9] |
\D | 숫자가 아닌 문자와 매치 [^0-9] |
\s | 화이트 스페이스 문자와 매치 [\t\n\r\f\v] |
\S | 화이트 스페이스 문자가 아닌 것과 매치 [^\t\n\r\f\v] |
\w | 숫자 또는 문자와 매치 [a-zA-Z0-9] |
\W | 숫자 또는 문자가 아닌 것과 매치 [^a-zA-Z0-9] |
\b | 단어의 경계를 나타냄. 단어는 영문자 혹은 숫자의 연속 문자열로 가정 |
\B | \b의 반대로 단어의 경계가 아님을 나타냄. |
3. match와 search 의 차이
- match : re.match 함수는 문자열의 시작부터 일치하는지 검사한다.
- search : re.search 함수는 부분적으 로 매치되는 문자열이 있는지 검사한다.
4. 로(raw) 모드 정규식 표현
이스케이프 문자열을 표현하기 위해 '\'(백슬래쉬)문자를 사용하므로, 문자 '\'를 정규표현식
으로 표현하기 위해 '\\\\'로 표현을 해야한다.
이때 로우 문잦열 표기법을 사용할 수 있다. 이는 문자열 앞에 'r'을 더한 것으로 '\'(백슬래쉬)
문자를 이스케이프 문자열로 처리하지 않고 일반 문자와 동일하게 처리한다.
>>> re.search('\\\\\w+','\\apples').group() '\\apples' >>> re.search(r'\\\w+', r'\apples').group() '\\apples' |
* re 모듈의 주요 메소드
메소드 |
설명 |
compile(pattern[, flags]) |
패턴을 컴파일하여 정규식 객체를 반환 |
match(pattern, string[, flags]) |
string의 시작부분부터 패터이 존재하느니 검사 하여 MatchObject 인스턴스 반환 |
search(pattern, string[, flags]) |
string의 전체에 대해 패턴이 존재하는지 검사 하여 MatchObject 인스턴스 반환 |
split(pattern, string[, flags]) |
패턴을 구분자로 string을 분리하여 리스트로 반환 |
findall(pattern, string[, flags]) |
string에서 패턴을 만족하는 문자열을 리스트로 반환 |
finditer(pattern, string[, flags]) |
string에서 패턴을 만족하는 문자열을 반복자로 반환 |
sub(pattern, repl, stringp[, count=0]) |
string에서 패턴과 일치하는 부분에 대하여 repl로 교체하여 결과 문자열을 반환 |
subn(pattern, repl, string[, count=0]) |
sub와 동일하나, 결과(결과 문자열, 매칭횟수) 를 튜플로 반환 |
escape(string) |
영문자 숫자가 아닌 문자들을 백슬래쉬 처리해 서 리턴 (임의의 문자열을 정규식 패턴으로 사용할 경우 유용) |
'Programming > python' 카테고리의 다른 글
[Python]ConfigParser사용하여 설정파일 읽어들이기 (5) | 2014.06.26 |
---|---|
[python] 디렉토리 전체 탐색, 특정 파일 필터링 (0) | 2014.06.16 |