[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🛠 기타/Data & AI

파이썬 정규표현식 - 문자 내용 바꾸기

inu 2020. 7. 15. 21:47
반응형

sub

import re

list_a = ['ab','a1b','a12b','a123b']
p = re.compile('a.{2}b')

for i in list_a:
    print(p.sub('change', i)) # sub는 내부 함수로, 해당 함수를 통해 추가적인 작업을 진행할 수 있다.
==결과==
ab
a1b
change
a123b
  • 정규식 오브젝트의 메소드인 sub함수는 match된 부분만 첫번째 파라미터의 문자열로 변경한다.
  • 'a.{2}b'와 매칭할 수 있는 것은 'a12b'뿐이기에 해당 문자만 첫번째 파라미터인 'change'로 변경되었다.

sub의 추가활용

import re

list_a = ['ab','a1b','a12b','a123b']
p = re.compile('a.{2}b')

def sub(match):
    matched_text = match.group()
    return matched_text + 'good'

for i in list_a:
    print(p.sub(sub, i)) # sub는 내부 함수로, 해당 함수를 통해 추가적인 작업을 진행할 수 있다.
==결과==
ab
a1b
a12bgood
a123b
  • 첫번째 파라미터에 문자열이 아닌 함수를 넣을 수도 있다.
  • 정규식 오브젝트의 sub 메소드가 아닌 sub 함수를 따로 설정했다. 해당 함수는 match된 match 오브젝트만을 파라미터로 받아 문자열 끝에 'good'을 붙여준다.
  • 이를 첫번째 파라미터로 활용하면 match된 부분만 첫번째 파라미터의 함수에 넣어주고 해당 함수의 리턴값을 리턴받는다.

예제

Q. '1100+1200+1300+1800=5400' 이라는 문장에서 등호표시 전의 숫자만 8진법으로 변경하세요.

def octa(match):
    a = int(match.group())
    return oct(a)

a = '1100+1200+1300+1800=5400'
p = re.compile(r'1\d{3}')
b = p.sub(octa, a)

print(b)
==결과==
0o2114+0o2260+0o2424+0o3410=5400
  • sub는 findall의 결과로 나오는 list의 성분 하나하나를 '첫번째 파라미터의 문자열로 변경' 혹은 '함수의 파라미터로서 활용'하고, 나머지값은 그대로 설정하여 리턴한다고 생각하면 편하다.
반응형