기본 규칙
\d -> 숫자 character와 일치 [0-9]
. -> 점은 어떠한 문자와 일치한다.
[abcd] : a or b or c or d
[a-d] : -와 함께 사용되면 해당 문자 사이의 범위에 속하는 문자 중 하나
[0-9] : 모든 숫자
[a-z] : 모든 소문자
[A-Z] : 모든 대문자
[a-zA-Z0-9] : 모든 알파벳 문자 및 숫자
[^0-9] : ^가 맨 앞에 사용되는 경우 해당 문자 패턴이 아닌 것과 매칭
m = re.search(r'\d\d\d\w', '112abcef119')
일때
m 은 112a
m = re.search(r '[cbm]at', 'mat')
: mat출력
re. search(r'[0-9]haha', '7hahah')
: 7haha출력
re.search(r'[abc.^]aron', 'caron')
: .aron출력
re.search(r'[^abc]aron', '#aron')
:#aron 출력
\d : [0-9]와 동일
\D : [^0-9]와 동일
\s : 공백문자
\S : 공백이 아닌 문자
\. 을쓰면 .이 특별한 의미를 갖지않고 문자 자체를 의미한다 .
re.search(r'\sand' , 'apple and banana')
: ' and' 출력
반복 패턴
'+' - > 1번 이상의 패턴이 발생
'*' -> 0번 이상의 패턴이 발생
'?' -> 0 혹은 1번의 패턴이 발생
re.search(r'a[bcd]*b' , 'abcbdccb')
-> 매치되는 부분이 많을 경우
가장 많이 매치되는 부분이 매칭한다.
: abcbdccb 출력
re.search(r'b\w+a', 'banana')
: banana 출력
re.search(r'i+', 'piigiii')
: ii 출력
re.search(r'pi+g', 'piig')
: piig출력
re.search(r'pi*g', 'pg')
: pig출력
re.search(r'https?', 'http://www.naver.com')
: http출력
^ : 문자열의 맨 앞부터 일치하는 경우 검색
$ : 문자열의 맨 뒤부터 일치하는 경우 검색
re.search(r'b\w+a', 'cabana')
:bana 출력
re.search(r'^b\w+a', 'babana')
:babana 출력
re.search(r' b\w+a$', 'cabana')
:bana출력
grouping
- ()을 사용하여 그루핑
- 매칭 결과를 각 그룹별로 분리 가능
- 패턴 명시 할 때, 각 그룹을 괄호()안에 넣어 분리하여 사용
m = re.search(r'(\w+)@(.+)', 'test@gmail.com')
print(m.group())
:test@gmail.com 출력
m.group(0) 은 기본값(전체)
m.group(1) 은 첫번째 그룹
{}: 반복 횟수를 명시할 수 있게된다.
{4} - 4번 반복
{3,4} - 3~4번 반복
re.search('pi{3, 5}g', 'piiiig' )
:piiiig 출력
미니멈 매칭(non-greedy way)
기본적으로 *,+,?를 사용하면 greedy(멕시멈 매칭)하게 동작함
*?, +?을 이용하여 해당 기능을 구현
re.search(r'<.+>', '<html>haha</html>')
: <html>haha</html> 출력
re.search(r'<.+?>', '<html>haha</html>')
: <html> 출력
{}?
- {m,n}의 경우 m번에서 n번 반복하나 greedy하게 동작
- {m,n}?로 사용하면 non-greedy하게 동작. 즉, 최소 m번만 매칭하면 만족
match
- search와 유사하나, 주어진 문자열의 시작부터 비교하여 패턴이 있는지 확인
- 시작부터 해당 패턴이 존재하지 않다면 None 반환
findall
- search가 최초로 매칭되는 패턴만 반환한다면, findall은 매칭되는 전체의 패턴을 반환
- 매칭되는 모든 결과를 리스트 형태로 반환
sub
- 주어진 문자열에서 일치하는 모든 패턴을 replace
- 그 결과를 문자열로 다시 반환함
- 두번째 인자는 특정 문자열이 될 수 있고, 함수가 될 수도 있음.
- count가 0인 경우느 전체를, 1이상이면 해당 숫자만큼 치환 됌
complie
- 동일한 정규표현식을 매번 다시 쓰기 번거로움을 해결
- complie로 해당표현식을 re.RegexObject 객체로 저장하여 사용가능
'Python > Algorithm' 카테고리의 다른 글
Baekjoon_1010_bridge python 풀이 (0) | 2022.05.10 |
---|---|
1240 distance BFS (0) | 2022.04.13 |
프로그래머스 - 문자열 압축 (0) | 2022.01.14 |
리스트 빼기 리스트 (0) | 2021.03.10 |