파이썬/파이썬-AI 기본
문장 중간의 특정 문자만 선택하기-정규표현식을 활용
용사냥꾼69
2023. 2. 25. 08:06
728x90
정규표현식
이에 대한 자세한 설명은 구글에 많이 있지만, 실제로 우리가 굳이 이걸 활용해야 할 때는 다소 복잡한 상황이다.
" 안녕하세요 저는 용사냥꾼입니다 " [223번째]
라는 문장이 있을 때
앞의 "는 <로 바꾸고
뒤의 "는 >로 바꾸고 싶다면
그래서 결과적으로
< 안녕하세요 저는 용사냥꾼입니다 > [223번째]
같은 상황을 얻고 싶다면 이 때부터 정규표현식이 필요해진다.
이에 맞는 코드는
import re
txt = '"안녕하세요 저는 용사냥꾼입니다" [223번째]'
txt = re.sub('(?<!.)"','<',txt)
txt = re.sub('"(?!.*")','>',txt)
print(txt)
앞조건문 - (?<! 표현식)
정규표현식에서 (?<! 표현식) 는 조건문으로 앞에 위치한 문자열 중에서 이 조건 표현식을 만족하지 않으면서 내부 표현식을 만족할 경우를 의미한다.
반대로 (?<= 표현식)은 앞에 위치한 문자열이 조건문을 만족하는 경우다.
. 은 모든 문자를 의미한다.
결국 (?<!.)" 은 앞에 문자가 없는 경우의 "를 대상으로 하며 이는 문장 맨 처음의 "를 가리킨다.
뒷조건문 - (?= 표현식)
(?! 표현식)은 해당 표현식 뒤에 위치한 문자열 중에서 표현식을 만족하지 않을 경우를 의미한다.
(?= 표현식)은 반대로 뒤에 위치한 문자열이 표현식을 만족하는 경우다.
*은 정해지지 않은 반복횟수이며 얼마든지 반복해도 괜찮다는 의미다.
따라서 "(?!.*")은 뒤에 문자가 몇 개가 있든간에 "가 또 나오지 않을 경우의 "를 대상으로 한다.
"가 더 없을 경우, >로 문장을 닫아줘야 하기 때문이다.
조건문이 있다는 사실을 기억하자
정규표현식 자체에 조건문이 있다는 것만 알아두면 답답한 일이 적다.
다 외우면서 사용할 필요는 없고, 적어도 가능한 것과 불가능한 것을 구분할 정도의 지식만 가져도 된다고 본다.