정규식 기본
반복 메타 문자
* |
0회 이상 반복 | ap*le > apple, ale, aple |
+ |
1회 이상 반복 | ap+le > apple, aple |
? |
0회 또는 1회 | ap?le > aple, ale |
{m} |
m회 반복 | ap{2}le > apple |
{m,n} |
m회부터 n회까지 반복 | ap{2,4}le > apple, appple, apppple |
매칭 메타 문자
. |
줄바꿈 문자를 제외한 모든 문자와 매치됨 |
ki.i > kiwi, ki3i, ki#i |
^ |
문자열의 시작과 매치됨 |
input - "apple kiwi banana" output - ^ap > ap |
$ |
문자열의 마지막과 매치됨 |
input - "apple kiwi banana" output - nana$ > nana |
[] |
문자 집합 중 한 문자를 의미 이 안에 있는 ^ 문자는 not 의 의미 |
ki[v-x]i > kivi, kiwi, kixi ki[vwx]i > kivi, kiwi, kixi |
| |
또는(or)를 의미 |
input - "apple kiwi" output - apple|straw > apple |
() |
정규식을 그룹으로 묶음 |
Match 객체의 group 란 참고 |
이스케이프 기호
\d |
모든 숫자와 매치됨 [0-9] |
\d > 0, 1, ... , 9 |
\D |
숫자가 아닌 문자와 매치됨 [^0-9] |
\D > a, b ... |
\s |
화이트 스페이스 문자와 매치됨 [ \t\n\r\f\v] |
\s > 공백 |
\S |
화이트 스페이스가 아닌 것과 매치됨 [^ \t\n\r\f\v] |
\S > 공백아닌것 |
\w |
숫자 또는 문자와 매치됨 [a-zA-Z0-9_] |
\w > _, a, Z ... |
\W |
숫자 또는 문자가 아닌 것과 매치됨 [^a-zA-Z0-9_] |
\W > 공백 등 |
\b | 단어의 경계를 나타냄. 단어는 영문자 혹은 숫자의 연속 문자열 | input - 'apple myapptest application tom' output - r'\bapp\w+\b' > ['apple', 'application'] |
\B | 단어의 경계가 아님을 나타냄 | input - 'apple myapptest application tom' |
\A | 문자열의 처음에만 일치 | ^ 와 동일한 의미 |
\Z | 문자열의 끝에만 일치 | $ 와 동일한 의미 |
최소 매칭을 위한 정규식
*? |
*와 같으나 문자열을 취소로 매치함 |
|
+? |
+와 같으나 문자열을 취소로 매치함 |
|
?? |
?와 같으나 문자열을 최소로 매치함 |
|
{m,n}? |
{m,n}과 같으나 문자열을 최소로 매치함 |
|
정규 표현식에서 사용 가능한 플래그
I, IGNORECATE |
대, 소문자를 구별하지 않는다 |
|
L, LOCATE |
\w, \W, \b, \B를 현재의 로케일에 영향을 받게 한다 |
|
M , MULTILINE |
^가 문자열의 맨 처음, 각 라인의 맨 처음과 매치 된다 $는 문자열의 맨 끝, 각 라인의 맨 끝과 매치 |
|
S, DOT ALL |
.을 줄바꾸기 문자도 포함하여 매치하게 한다 |
|
U, UNICODE |
\w, \W, \b, \B가 유니코드 문자 특성에 의존하게 한다 |
|
X, VERBOSE |
정규식 안의 공백은 무시된다 |
|
re모듈의 주요 메소드
compile(pattern[, flags]) |
pattern을 컴파일하여 정규식 객체를 반환 |
c = re.compile(r'apple') match = c.search(string) print(match.group()) |
match(pattern, string[,flags]) |
string의 시작부분부터 pattern이 존재하는지 검사하여 MatchObject 인스턴스를 반환 |
|
search(pattern, string[,flags]) |
string의 전체에 대해서 pattern이 존재하는지 검사하여 MatchObject 인스턴스를 반환 |
|
split(pattern, string[, maxplit=0]) |
pattern을 구분자로 string을 분리하여 리스트로 반환 |
str = 'aaa-bbb#ccc.ddd eee' s = re.split('[-#. ]', str) # - 는 맨 앞이나 뒤에 써야함. a-z 처럼 사이값을 나타내므로 print(s) # ['aaa', 'bbb', 'ccc', 'ddd', 'eee'] |
findall(pattern, string[, flags]) |
string에서 pattern을 만족하는 문자열을 리스트로 반환 |
|
finditer(pattern, string[, flags]) |
string에서 pattern을 만족하는 문자열을 반복자로 반환 |
str = 'apple kiwi banana application' match = re.finditer('app\w+', str) for m in match: print(m.group()) # apple, application |
sub(pattern, repl, string[, count=0]) |
string에서 pattern과 일치하는 부분에 대하여, repl로 교체하여 결과 문자열을 반환 |
TC1) str = 'apple kiwi banana application' s = re.sub('app\w+', 'like', str) print(s) # 'like kiwi banana like' TC2) def fn(m): # m = match 객체 return 'add_' + m.group() # m 앞에 add_ 문자열 붙임 str = 'apple kiwi banana application' s = re.sub('app\w+', fn, str) print(s) # 'add_apple kiwi banana add_application' |
subn(pattern, repl, string[, count=0]) |
sub와 동일하나, 결과로(결과문자열, 매칭횟수)를 튜플로 반환 |
|
escape(string) |
영문자 숫자가 아닌 문자들을 백슬래쉬 처리해서 리턴. (임의의 문자열을 정규식 패턴으로 사용할 경우 유용) |
|
Match 객체
group([group1, ...]) |
입력받은 인덱스에 해당하는 매칭된 문자열 결과의 부분 집합을 반환합니다. 인덱스가 '0'이거나 입력되지 않은 경우 전체 매칭 문자열을 반환합니다. |
s = '123-abc def-ghi 346-Abc' match = re.search("(\d{3})-([a-z]{3})", s) print(match.group()) # 123-abc print(match.group(1)) # 123 print(match.group(2)) # abc |
groups() |
매칭된 결과를 튜플 형태로 반환 |
print(match.groups()) # ('123', 'abc') |
groupdict() |
이름이 붙여진 매칭 결과를 사전 형태로 반환 |
|
start([group]) |
매칭된 결과 문자열의 시작 인덱스를 반환. (인자로 부분 집합의 번호나 명시된 이름이 전달된 경우, 그에 해당하는 시작 인덱스를 반환) |
|
end([group]) |
매칭된 결과 문자열의 종료 인덱스를 반환. (인자로 부분 집합의 번호나 명시된 이름이 전달된 경우, 그에 해당하는 종료 인덱스를 반환) |
|
pos |
원본 문자열에서 검색을 시작하는 위치입니다 |
|
endpos |
원본 문자열에서 검색을 종료하는 위치입니다 |
|
lastindex |
매칭된 결과 집합에서 마지막 인덱스 번호를 반환. (일치된 결과가 없는 경우 에는 None을 반환) |
|
lastgroup |
매칭된 결과 집합에서 마지막으로 일치한 이름을 반환. (정규식의 매칭 조건에 이름이 지정되지 않았거나 일치된 결과가 없는 경우 None 반환) |
|
string |
매칭의 대상이 되는 원본 문자열입니다. |
|
'교육 > Pyhotn 180709-180713' 카테고리의 다른 글
4일차 sqlite (0) | 2018.07.12 |
---|---|
4일차 python 확장 - C 언어 (0) | 2018.07.12 |
3일차 library (0) | 2018.07.11 |
3일차 Class (0) | 2018.07.11 |
2일차 module (0) | 2018.07.10 |