정규표현식

이찬·2023년 7월 8일
0

Python

목록 보기
16/17
post-thumbnail

정규 표현식 (Regular expressions)

  • 특정한 패턴에 일치하는 복잡한 문자열을 처리할 때 사용하는 기법. 복잡한 문자열의 검색과 치환을 위해 사용되며, Python 뿐만 아니라 문자열을 처리하는 모든 곳에서 사용된다.
  • 파이썬에서는 표준 모듈 re를 사용해서 정규표현식을 사용할 수 있다.

    import re
    result = re.match('Lux', 'Lux, the Lady of Luminosity')

  • match의 첫 번째 인자에는 패턴이 들어가며, 두 번째 인자에는 문자열 소스가 들어간다. match()는 소스와 패턴의 일치 여부를 확인하고, 일치할 경우 Match object를 반환한다.

메타 문자 (Meta characters)

메타 문자란 문자가 가진 원래의 의미가 아닌 특별한 용도로 사용되는 문자를 말한다. 정규표현식에서 사용되는 메타 문자는 다음과 같다.

. ^ $ * + ? \ | ( ) { } [ ]

[] 문자 클래스

  • 정규표현식에서 대괄호 [] 는 대괄호 안에 포함된 문자들 중 하나와 매치를 뜻한다.
  • [] 안의 두 문자에 -를 사용하면 두 문자 사이의 범위를 뜻한다.

\d 숫자 [0-9]와 같다.
\D 비숫자 [^0-9]와 같다.
\w 숫자 + 문자 [a-zA-Z0-9]와 같다.
\W 숫자 + 문자가 아닌 것 [^a-zA-Z0-9]와 같다.
\s 공백 [ \t\n\r\f\v]와 같다.
\S 비공백 [^ \t\n\r\f\v]와 같다.
\b 단어 경계 (\w\W의 경계)
\B 비단어 경계

  • [] 안에서 ^는 반대를 뜻한다.

매치 객체의 메서드

메서드
group() 매치된 문자열 출력
start() 매치 시작지점 인덱스 출력
end() 매치 끝지점 인덱스 출력
span() (start(), end())를 튜플로 출력

() 그룹화

  • 정규표현식을 () 안에 넣으면 그 부분만 그룹화된다. groups 메서드를 통해 그룹들을 튜플 형태로 리턴 할 수 있다.

Python 정규표현식의 \ 문제

-Python에서 정규표현식에 \ 을 사용할 때 아래와 같은 문제가 발생할 수 있다.

text = '\section'
result = re.match('\\section', text)
print(result)
#none

-\s는 공백문자를 뜻하는 메타문자로 인식되기 때문에 \section 이라는 문자열을 찾으려면 위해 이스케이프 코드 \를 사용한 \section 를 정규표현식에 입력해야한다.
그러나 Python 정규식 엔진에서 리터럴 규칙에 의해 \ 가 \로 해석되어 전달된다.
따라서 \ 를 문자 그대로 넘겨주어야하는데 이를 위해서는 \\ 로 입력해야한다.

text = '\section'
result = re.match('\\\\section', text)
print(result)
#<_sre.SRE_Match object; span=(0, 8), match='\\section'>
  • 이를 방지하기 위해 다음과 같이 작성한다.
text = '\section'
result = re.match(r'\\section', text) # raw string을 뜻하는 r을 앞에 붙여준다.
print(result)
#<_sre.SRE_Match object; span=(0, 8), match='\\section'>

- 정규표현식 앞에 r은 항상 붙여주는 것이 권장된다.

profile
Kyunghee univ. IE 21

0개의 댓글