반응형
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의 성분 하나하나를 '첫번째 파라미터의 문자열로 변경' 혹은 '함수의 파라미터로서 활용'하고, 나머지값은 그대로 설정하여 리턴한다고 생각하면 편하다.
반응형
'🛠 기타 > Data & AI' 카테고리의 다른 글
[scikit-learn 라이브러리] XOR 문제 (0) | 2020.07.15 |
---|---|
파이썬 토크나이저 - 기초활용 (0) | 2020.07.15 |
단층 퍼셉트론 - 회귀분석 구현 (0) | 2020.07.15 |
Pandas 데이터프레임 정렬 (0) | 2020.07.15 |
Pandas 데이터 시각화 카테고리 (0) | 2020.07.14 |