포스트는 edwith강좌 모두를 위한 파이썬 강의를 수강하며 보충 학습한 글입니다.
정규식은 축약된 언어의 한 종류로, 기호로 되어있기 때문에 굉장히 효율적으로 데이터를 뽑거나 찾을 수 있다. 이번 포스팅을 통해 정규식을 정리해보고자 한다.
▶정규식을 사용하기 위해선. . .
우선 import re 명령어를 통해 정규식라이브러리를 불러와야한다.

라이브러리엔 많은 메소드가 있지만, 이 포스팅에선 자주 사용되는 search와 findall메소드를 우선 정리해보고자한다.
▶re.search
re.search 메소드는 find()메소드처럼 정규식에 매칭되는 문자열들을 찾을 수 있도록 해준다.

이러한 데이터를 가진 텍스트파일에서 From을 포함한 문자열을 뽑고 싶을 때, find()매서드를 사용하면 코드는 다음과 같다.

이를 실행하면, 원하는 문자열들을 모두 뽑을 수 있다. 이는 다음과 같이 정규식과 search메소드로도 동일하게 구현해낼 수 있다.

만약 line에서 'From:'으로 시작하는 문자열들을 찾고 싶을 땐 위의 for- if문에서 다음과 같이 조금만 정규식을 바꿔주면 된다.

대표사진 삭제
사진 설명을 입력하세요.
원하는 시작문자열 앞에 ^를 붙여주면 그 문자열로 시작하는 문자열을 찾으라는 의미가 된다. search메소드의 경우, 해당 문자열이 정규식을 만족시키는지를 T/F형태로 리턴한다. 따라서 바로 위의 코드의 의미는, 만일 line에서 'From:'으로 시작하는 문자열이 존재하여 True를 반환한다면 그 때 line을 출력하라는 소리가 된다. 즉, search메소드가 False를 반환하면 해당 line은 출력하지 않는 것이다.
▶re.findall
T/F형태로 리턴하는 것이 아닌 문자열 그 자체를 추출하고 싶을 때 사용하는 것이 findall 메소드이다. 이 메소드를 실행하면 대상정규식에 해당하는 모든 문자열들을 리스트형태로 반환한다.
txtstr= 'my FAVORITE numbers are 29, 4, 194'
출처 입력
txtstr문자열에서 숫자데이터를 추출하고자 한다. 이럴땐 다음과 같이 코드를 작성한다.
>>>x=re.findall('[0-9]+',txtstr)
>>>print(x)
['29','4','194']
출처 입력
정규식에서 [0-9]는 0에서 9까지의 숫자리스트에서 하나의 숫자를 가리키고 뒤의 +는 하나의 숫자가 한번이상 반복되는 문자열을 추출하라는 의미이다.
마찬가지로 txtstr에서 대문자로 이뤄진 문자열을 추출하고 싶을 땐 다음과 같이 코드를 작성한다.
>>>y=re.findall('[A-Z]+', txtstr)
>>>print(y)
['FAVORITE']
출처 입력
정규식에서 [A-Z]+는 대문자로 이뤄진 하나의 문자가 한번이상 반복되는 문자열을 추출하라는 의미이다.
이처럼 findall 메소드는 정규식에 해당하는 문자열들을 추출한 리스트들을 반환한다.
▶여러 정규식 표현들
^: 바로 뒤에 오는 문자로 시작하는 문자열 검색
$: 바로 앞에 오는 문자로 끝나는 문자열 검색
. : 아무 문자검색
*: 바로 앞선 문자가 0 혹은 그 이상 반복되는 문자열 검색
*?: 바로 앞선 문자가 0 혹은 그 이상 반복되는 문자열을 검색하되, 검색되는 문자열을 최소한으로 짧게 검색
+: 바로 앞선 문자가 1 혹은 그 이상 반복되는 문자열 검색
+?: 바로 앞선 문자가 1 혹은 그 이상 반복되는 문자열을 검색하되, 검색되는 문자열을 최소한으로 짧게 검색
\s: 공백문자를 매칭
\S: 공백문자 아닌 문자를 매칭
[aeiou]: 소문자인 aeiou 단일문자와 매칭되는 문자열 검색
[AEIOU]: 대문자인 AEIOU 단일문자와 매칭되는 문자열 검색
[a-z]: 소문자인 단일문자와 매칭되는 문자열 검색
[A-Z]: 대문자인 단일문자와 매칭되는 문자열 검색
[^ ]: 공백이 아닌 문자열 검색
(): 정규표현식에서 섬세한 문자열을 추출하고자 할때 ()안에 해당하는 문자열들만 검색하여 추출
<Example>
1.
re.search 파트에서 활용한 텍스트 파일을 활용하여, From으로 시작하는 문자열에서 @다음으로 오는 문자열들을 정규표현식으로 추출해보자.
-> '^From .*@([^ ]+)'
(From으로 시작하고 아무 문자가 0번이상 반복된 후 @문자가 나타나면 그 이후 괄호안에 있는 문자열 부터 추출시작한다. 공백이 아닌 문자가 1번이상 반복되는 문자열을 추출한다.)
2.
'Favorite: Icecream:'이라는 문자열에서 Favorite:을 추출하자.
-> '^F.+?:'
(F로 시작하고 아무 문자가 1번이상 반복된후 :로 끝나는 문자열 중 가장 짧은 문자열을 추출한다.)
!! 주의!!
+뒤에 ?문자를 써주지 않으면 정규식은 가장 길게 매칭되는 경우인 Favoirte: Icecream:을 모두 추출한다. 이를 방지하기 위해 해당 정규식에 매칭되는 가장 짧은 문자열을 추출하도록 제한해주는 것이 바로 ?문자이다.
정규표현식에 대한 자세한 설명은 다음 url을 참고하자.
위키독스
온라인 책을 제작 공유하는 플랫폼 서비스
wikidocs.net