문자열에서 특정 문자 조합을 찾기 위한 패턴
대괄호 안의 문자와 매치된다.
그냥 문자랑 다른 것은 [ ]을 쓰면 [ ] 안에 조건 중 아무거나 하나라도 매치된다는 것
[abc] → a,b,c 중 하나와 매치
대괄호안에서 -(하이픈)은 두 문자 사이의 범위!
[a-c] === [abc]
[a-z] === 모든 소문자
[A-Z] === 모든 대문자
[a-zA-z] === 모든 대,소문자 즉,알파벳
[0-9] === 모든 숫자
반대(not)의 의미.
[^0-9] === 숫자가 아닌 문자만 매치
.
:한 개의 임의의 문자를 나타냅니다. (줄바꿈 문자인 \n는 제외)import re string = "...!@BaT#*..y.abc defgh 오류 : 404"
\d
: 숫자를 의미합니다
[0-9]
:숫자를 의미합니다print(re.findall('\d', string)) # ['4', '0', '4'] # 여러개를 이어붙이면 그 이어붙인만큼의 갯수임을 뜻한다 print(re.findall('\d\d', string)) # ['40']
\w
:문자 또는 숫자를 의미합니다
[a-zA-Z0-9]
: 문자 또는 숫자를 의미합니다print(re.findall('\w', string)) # ['B', 'a', 'T', 'y', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', '오', '류', '4', '0', '4'] # 한국어도 포함한다면 이렇게! print(re.findall('[a-zA-Z0-9가-힣]', string)) # ['B', 'a', 'T', 'y', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', '오', '류', '4', '0', '4'] # 숫자 |(or) 문자 이렇게도 가능 print(re.findall('\d|\w', string)) # ['B', 'a', 'T', 'y', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', '오', '류', '4', '0', '4']
\W
: 문자 또는 숫자가 아닌 문자를 의미합니다. (특수문자 등)
[a-zA-Z0-9]
: 문자 또는 숫자가 아닌 문자를 의미합니다. (특수문자 등)print(re.findall('\W', string)) # ['.', '.', '.', '!', '@', '#', '*', '.', '.', '.', ' ', ' ', ' ', ':', ' '] print(re.findall('[^a-zA-Z0-9]', string)) # ['.', '.', '.', '!', '@', '#', '*', '.', '.', '.', ' ', ' ', '오', '류', ' ', ':', ' '] print(re.findall('[^a-zA-Z0-9가-힣]', string)) # ['.', '.', '.', '!', '@', '#', '*', '.', '.', '.', ' ', ' ', ' ', ':', ' ']
\s
: 공백을 의미합니다. [ \t\n\r\f\v]와 의미가 동일합니다.
\S
: 공백을 제외한 문자를 의미합니다. [^ \t\n\r\f\v]와 의미가 동일합니다.print(re.findall('\s', string)) # [' ', ' ', ' ', ' '] print(re.findall('\S', string)) # ['.', '.', '.', '!', '@', 'B', 'a', 'T', '#', '*', '.', '.', 'y', '.', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', '오', '류', ':', '4', '0', '4']
?
: 앞의 문자가 존재할 수도 있고, 존재하지 않을 수도 있습니다. (문자가 0개 또는 1개)print(re.findall('\d?', string)) # ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '4', '0', '4', ''] #주로, 이렇게 씀 "숫자가 있다면 ''로 바꿔라(sub) print(re.sub('\d?', '',string)) # ...!@BaT#*..y.abc defgh 오류 :
*
: 앞의 문자가 무한개로 존재할 수도 있고, 존재하지 않을 수도 있습니다. (문자가 0개 이상)print(re.findall('\d*', string)) # ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '404', ''] # 숫자(\d)인 404를 통채로 봄
++++) \d, \s, \w같은 경우는 문자 그자체 d,s,w와 구분되야 하기에 \를 써야 한다 !!
+
: 앞의 문자가 최소 한 개 이상 존재합니다. (문자가 1개 이상)print(re.findall("\d+", string)) # ['404']
다른 예시
string = "@BaT#.abc aa" print(re.findall('a?', string)) # ['', '', 'a', '', '', '', 'a', '', '', '', 'a', 'a', ''] print(re.findall('a*', string)) # ['', '', 'a', '', '', '', 'a', '', '', '', 'aa', ''] print(re.findall('a+', string)) # ['a', 'a', 'aa']
{숫자}
: 숫자만큼 반복합니다.
{숫자1, 숫자2}
: 숫자1 이상 숫자2 이하만큼 반복합니다. ?, *, +를 이것으로 대체할 수 있습니다.
{숫자,}
: 숫자 이상만큼 반복합니다.print(re.findall('\w{2}', string)) # ['Ba', 'ab', 'de', 'fg', '오류', '40'] ## 'Ba'를 탐색하고 'aT'는 무시되었음 주의.. print(re.findall('\w{2,4}', string)) # ['BaT', 'abc', 'defg', '오류', '404'] print(re.findall('\w{2,}', string)) # ['BaT', 'abc', 'defgh', '오류', '404'] print(re.findall('[a-zA-Z]{2,}', string)) # ['BaT', 'abc', 'defgh'] print(re.findall('\S{2,}', string)) # ['...!@BaT#*..y.abc', 'defgh', '오류', '404']
^
: 뒤의 문자열로 문자열이 시작됩니다.print(re.findall('^\.',string)) # ['.']
$
: 앞의 문자열로 문자열이 끝납니다.print(re.findall('\d$',string)) # ['4']
모듈 : import re
모듈 함수 | 설명 |
---|---|
re.compile() | 정규표현식을 컴파일하는 함수입니다. 다시 말해, 파이썬에게 전해주는 역할을 합니다. 찾고자 하는 패턴이 빈번한 경우에는 미리 컴파일해놓고 사용하면 속도와 편의성면에서 유리합니다. |
re.search() | 문자열 전체에 대해서 정규표현식과 매치되는지를 검색합니다. |
re.match() | 문자열의 처음이 정규표현식과 매치되는지를 검색합니다. |
re.split() | 정규 표현식을 기준으로 문자열을 분리하여 리스트로 리턴합니다. |
re.findall() | 문자열에서 정규 표현식과 매치되는 모든 경우의 문자열을 찾아서 리스트로 리턴합니다. 만약, 매치되는 문자열이 없다면 빈 리스트가 리턴됩니다. |
re.finditer() | 문자열에서 정규 표현식과 매치되는 모든 경우의 문자열에 대한 이터레이터 객체를 리턴합니다. |
re.sub() | 문자열에서 정규 표현식과 일치하는 부분에 대해서 다른 문자열로 대체합니다. |
출처 : https://wikidocs.net/21703#2