1편 : 2022.08.11 - [코딩/Python] - [Python/파이썬] 문자열 처리 정규 표현식(regular expression) - 1
2편 : 2022.09.03 - [코딩/Python] - [Python/파이썬] 문자열 처리 정규 표현식(regular expression) - 2 : 실제 예시를 통한 이해
이전 포스팅에서 문자열 처리 정규 표현식에 대한 간단히 다뤄보았다. 이번에는 실제 업무적으로 마주칠 수 있는 상황 들에 대해 어떻게 정규 표현식을 적용할 수 있는지 간단한 사례를 정리해보았다. 실제 C언어에서 필요 한 부분을 파싱하는 업무를 진행하고 있고 해당 구문들을 사용하고 있다.
Case1. C/C++ for 반복문에서 변수명, 반복횟수 등을 구하기 위한 숫자,문자 추출
test 문자열
text1 = "for(i=33, i<=99, i++)"
1) for문에서 i의 시작 숫자값을 구해보기(i=1에서 정수 1)
- 먼저 문자열 분리 함수인 split을 써서 콤마(,) 단위로 리스트화 한다.
- split 함수는 분리할 문자를 기준으로 리스트화 한다.
<코드>
text1 = text1.split(",")
print("1차분리 : ", text1)
<결과>
1차분리 : ['for(i=33', ' i<=99', ' i++)']
2) 첫번째 요소를 활용해 숫자 33만 뽑아내는 정규표현식 작성
- 숫자만 포함하는 정규표현식 [0-9]이 1개이상 나와야 한다.
- [0-9]+ 또는 [0,9]{1,} 적용
- {1,}의 의미 : 앞 정규 표현식 규칙이 1번이상 반복되어야 한다는 의미이다. +랑 동일한 표현이다.
즉, [0-9]{1,}의 의미는 숫자가 1번이상 나올 경우 매칭된다는 의미이다. Search이므로 문자열 전체에서 일치하는 부
분을 찾는다.
- 코드 중 .group( )은 매칭객체의 매칭값을 문자열로 표시한다.
<코드>
m1 = re.search("[0-9]{1,}", text1[0])
print(m1) #매칭 객체
start_num = m1.group() #매칭값
print(start_num) #출력
<결과>
<re.Match object; span=(6, 8), match='33'>
33
Case2. for문에서 조건을 나타내는 수식 부등호 뽑아보기
1) 위 text1을 분리한 결과에서 2번째 요소를 활용한다.
<코드>
text1 = text1.split(",")
print("조건문:", text1[1])
<결과>
조건문: i<=99
2) 특수문자 (<, >, =)를 뽑아내는 정규표현식 작성
<코드>
m2 = re.search("[<>=]{1,}", text1[1])
print(m2)
exp = m2.group()
print(exp)
<결과>
<re.Match object; span=(2, 4), match='<='>
<=
Case3. 중괄호 [ ] 내부의 변수명 출력하기 (배열 내부 변수명)
test 문자열
text2 = "[var]"
text3 = "[ab4213]"
<코드>
m4 = re.search("[a-zA-Z0-9]+", text2)
print("text2 매칭정보: ", m4)
print("text2 매칭문자열: ", m4.group())
m5 = re.search("[a-zA-Z0-9]+", text3)
print("text3 매칭정보: ", m5)
print("text3 매칭문자열: ", m5.group())
<결과>
text2 매칭정보: <re.Match object; span=(1, 4), match='var'>
text2 매칭문자열: var
text3 매칭정보: <re.Match object; span=(1, 7), match='ab4213'>
text3 매칭문자열: ab4213
Case4. 변수 선언에서 실수값만 뽑아내기(부등호 포함)
test문자열
text4 = "Value1 = +36.9;"
text5 = "Value2 = -36.9;"
text6 = "Value3 = 103.323;"
<코드>
# case5. 실수값만 뽑아내기
m6 = re.search("[\s]{1,}[-+]{0,1}[0-9]+[.]{0,}[0-9]{0,}", text4)
print("text4 매칭 :", m6)
print("text4 매칭값 :", m6.group().strip())
m7 = re.search("[\s]{1,}[-+]{0,1}[0-9]+[.]{0,}[0-9]{0,}", text5)
print("text4 매칭 :", m7)
print("text4 매칭값 :", m7.group().strip())
m8 = re.search("[\s]{1,}[-+]{0,1}[0-9]+[.]{0,}[0-9]{0,}", text6)
print("text4 매칭 :", m8)
print("text4 매칭값 :", m8.group().strip())
- 정규표현식이 복잡하지만 하나씩 뜯어보면 간단하다.
[\s]{1,} : 공백(Space)가 하나 이상 있는 경우
[-+]{0,1} : 특수문자인 - 또는 +가 없을 수도있고 1개 나올 수도 있음.
[0-9]+ : Case1에서 다뤘던 부분으로 숫자가 1개이상 나와야 함.
[.]{0,} : 문자인 Dot(.)가 0개일 수도 있고 1개이상나올 수도 있음.
[0-9]{0,} : 숫자가 0개일 수도 있고 1개이상 나올 수도 있음.
- 이 정규표현식을 적용하면 text4, text5, text6 와 같은 여러 case의 실수값을 파싱할 수 있다.
<결과>
text4 매칭 : <re.Match object; span=(8, 14), match=' +36.9'>
text4 매칭값 : +36.9
text5 매칭 : <re.Match object; span=(8, 14), match=' -36.9'>
text5 매칭값 : -36.9
text6 매칭 : <re.Match object; span=(8, 16), match=' 103.323'>
text6 매칭값 : 103.323
'코딩 > Python' 카테고리의 다른 글
[Python/파이썬]문자열 처리 정규 표현식(regular expression) - 3 : 긍정형 전방탐색, 긍정형 후방탐색 (0) | 2022.10.25 |
---|---|
[Python/파이썬] 문자열 처리 정규 표현식(regular expression) - 1 (0) | 2022.08.11 |
[Python/파이썬] xlwings RunPython 파일 경로 수정하기(다른 경로 파이썬 파일 import 하기) (0) | 2022.03.18 |
[Python/파이썬] json 모듈 사용법 (2) | 2021.09.05 |
[Python/파이썬] Generator(제너레이터) , Iterator(이터레이터) (0) | 2021.08.23 |