파이썬(Python)

정규 표현식(정규식) - 2

BlueNoa 2021. 6. 13. 20:08
728x90
반응형

· 각 객체의 메서드

전 장에 이어서 re모듈에 속해 있는 객체의 메서드에 대해 이야기 내용을 추가한다.

 

· Match의 메서드

메서드 목적
group() 현재 매치된 문자열을 반환한다.
start() 매치된 문자열의 시작점을 반환한다.
end() 매치된 문자열의 끝지점을 반환한다.
span() 매치된 문자열의 시작과 끝을 튜플 형식으로 반환한다.

<Match 예제>

data4 = "It's still June and the weather is too hot."
p = re.compile('[a-zA-Z]+')
a = re.match(p, data4)
print(a.group()) 
# match는 처음부터 매치가 되는 값을 반환하기 때문에 '과 공백에서 매칭이 멈췄다.
print(a.start())
print(a.end())
print(a.span())

<결과>

It
0
2
(0, 2)

 

<search 예제>

앞에 숫자 3과 공백을 추가한 후 실행한 결과

data5 = "3 It's still June and the weather is too hot."
p = re.compile('[a-zA-Z]+')
a = re.search(p, data5)
print(a.group()) 
# match는 처음부터 매치가 되는 값을 반환하기 때문에 '과 공백에서 매칭이 멈췄다.
print(a.start())
print(a.end())
print(a.span())
It
2
4
(2, 4)

 

 

· Compile의 부가기능(옵션)

명령어 축약어 설명
DOTALL S dot(.) 문자가 줄바꿈(\n)을 포함하여 모든 문자를 매치한다.
IGNORECASE I 대/소문자에 관계 없이 매치
MULTILINE M 여러 줄과 매치(메타 문자 사용에 관계가 있다.)
VERBOSE X verbose 
장황하다는 뜻으로 복잡한 정규식을 보기 편하게 설명해줄 수 있고 주석을 달 수 있다.

축약어는 명어를 대체해서 사용할 수 있는 명령어다.

 

<간단한 예시>

# DOTALL, S
p = re.compile('단어', re.DOTALL)
p = re.compile('단어', re.S)

# IGNORECASE, I
p = re.compile('[a-z]', re.I)

# MULTILINE, M
p = re.compile('^p\w+', re.M)

# VERBOSE, X
p = re.compile(r"""
    [0-9a-zA-Z] # 숫자와 영문 대소문자
    [_0-9a-zA-Z-]* _, -, 숫자, 영문 대소문자를 반복하는 모든 문자(* : 반복)
    @[_0-9a-zA-Z-]+ # @이후 _, -문자를 포함한 숫자, 영문 대소문자중 하나 이상
    (\. # . 문자를 포함할땐 \. 으로 사용한다.
    [_0-9a-zA-Z-]+
    )
    {1,3}$ # 한 글자부터 세 글자까지, $ : ~ 으로 끝나야 한다.
    """, re.VERBOSE)

tip :  만약 어느 한 객체에 파일의 위치나 혹은 인터넷 주소 등을 기입하고 싶을 때 \n, \w 등이 정규식으로써 인식이 되버리는 경우 \\n, \\w 등으로 백 슬래쉬를 두 번써서 이를 무효화 했지만 re모듈에는 유용한 기능이 있다.

바로 위에 예시와 같이 정규식을 써주기 전에 r"[정규 표현식 내용 기입]" 이렇게 앞에 r을 써주면 \기능을 무시할 수 있다.

\기능이 없는 문자열이었다면 기존의 정규식과 동일하게 작동될 것이다.

 

 

 

· 문자열 바꾸기

sub 메서드를 이용하면 문자열의 내용 바꿔줄 수 있다.

여기에 정규식을 함께 이용하면 특정 문자들을 전부 교체해줄 수 있다.

<예제>

data6 = 'I like a red car, a green smartphone, and a blue umbrella.' 
p = re.compile('(red | green | blue)') # ()는 하나의 그룹을 만들어 준다.
print(p.sub(' rgb ', data6)) # | : or의 기능
I like a  rgb car, a rgb smartphone, and a rgb  umbrella.

※ subn을 사용하면 변경된 횟수도 같이 출력된다.

 

 

 

· 그 외 여러 메서드

메서드 이름 설명
fullmatch(패턴, 문자열) 문자열의 시작과 끝이 모두 패턴과 일치해야지만 반환
split(패턴, 문자열, 최대 나눌 숫자) 문자열이 패턴에 부합하면 해당 부분부터 리스트로 구분지어주는 함수이다, 최대 수를 '3'이라고 지정하면 3회 분할하고 작동을 멈춘다.
purge() compile()을 통해서 만든 객체는 캐시가 약 100개가 넘어가면 자동으로 초기화 된다.
하지만 purge()를 사용해서 만들면 100개가 넘어가지 않아도 초기화 된다.
escape(패턴) 패턴으로 입력 받은 특수기능문자(\n, \d, \w 등)를 이스케이프(탈출 : 기능 해제)해서 반환한다.

 

728x90
반응형

'파이썬(Python)' 카테고리의 다른 글

파이썬 - 사용자 정의 함수  (0) 2021.06.15
파이썬 - 내장 함수  (0) 2021.06.14
정규 표현식(정규식) - 1  (0) 2021.06.13
For 반복문  (0) 2021.06.12
While문과 Random함수  (0) 2021.06.10