python 정규표현식 search(), group()

박은정·2021년 7월 28일
2

TIL

목록 보기
7/72

코드1

import re

정규표현식 = r'([a-zA-Z]+) : (Wd+)'

문자열 = 'name : leehojun. age : 10. height : 180, email : paul-lab@naver.com'

결과 = re.search(정규표현식, 문자열)

pritn(결과)

'''
실행결과
<re.Match object: span=(17, 25), match='age : 10'>
'''

코드해석

  1. r 이라고 입력하면 파이썬이 정규표현식이라고 인식한다
    import.re에서의 re의 약자

  2. 그룹1

    • [a-zA-Z] 문자열 ++
    • 문자열에 대해서 문자가 1개이상 있는 값을 매칭
  3. search() 메서드

    • 문자열 전체에서 정규식 매칭 여부 판단한다
    • 있을 경우 object 주소 반환, 없을 경우 None 반환

colab에서 코드실행하는 코드 command + Enter

search() 메서드의 type

print(type(결과))

# <class 're.Match'>

결과의 type 을 알아보면 위와같이 나오는데 이는
정규표현식에 매칭되는 값으로 가져왔다는 것을 알 수 있다

match() 메서드

문자열 처음이 정규식 매칭 여부 판단
있을 경우 object 주소 반환, 없을 경우 None반환

object

객체(object) : 실제 세계에 존재하는 실체(instance)
클래스(class) : 객체들의 공통점을 간추려서 개념적으로 나타낸 것

search() 메서드를 딕셔너리로 변환

print(dir(결과))

# ['_class_', '_copy_', '_deepcopy_', '_delattr_', '_dir_', '_doc_', '_eq_', ...>

리스트로 결과값이 나오는데 여기서 사용가능한 메서드 들을 결과값으로 가져왔다

search() 메서드의 주소값 찾기

print(결과.start()) # 17
print(결과.end())  # 25

문자열에서 정규표현식으로 매칭된 값의 object 주소의
각각 시작값과 끝값을 확인했다

print(문자열[결과.start(): 결과.end()])

'''
실행결과
'age : 10'

코드설명
1.문자열[:] : 문자열을 인덱싱했는데
2. 결과.start() object 주소의 시작값
3. 결과.end() : object 주소의 끝값
→ 결과 : 문자열의 데이터 중에서 ([a-zA-Z]+) : (Wd+) 에 매칭되는 값 출력

group() 그룹

전체 그룹에서 매칭 group()

print(결과.group())
코드실행결과 'age : 10'

그룹 두개모두 매칭 group(0)

결과.group(0)
코드실행결과'age : 10'

group() vs group(0) 차이점

그룹1에서 매칭 group(1)

결과.group(1)
코드실행결과 'age'

그룹2에서 매칭 group(2)

결과.group(2)
코드실행결과'10'

존재하지 않는 그룹에서 매칭시도

결과.group(3) : 그룹3은 없기때문에 에러로 나온다

IndexError : no such group
profile
새로운 것을 도전하고 노력한다

0개의 댓글