본문 바로가기

Python/Algorithm

[Python] 정규 표현식

 기본 규칙

 

\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