IT/Python
[Python] 정규식을 활용하는 다양한 방법
Dragonz
2020. 11. 14. 15:40
반응형
find 메소드와 슬라이싱을 통해 이메일 호스트를 추출할 수 있다.
data = 'From stephen.marquard@uct.ac.za Sat Jan 5:09:14:16 2020'
# 문자열에서 @ 이 위치한 포지션을 구한다.
atpos = data.find('@')
print(atpos)
# @ 이 위치한 곳 부터 처음 발견된 공백의 포지션을 구한다.
sppos = data.find(' ', atpos)
print(sppos)
# @ 다음문자부터 공백까지의 문자열 (이메일 호스트) 을 슬라이싱한다.
host = data[atpos+1 : sppos]
print(host)
split 메소드를 활용한 방법도 있다. 공백 문자를 기준으로 문자열을 나누고, 다시 @ 을 기준으로 문자열을 나눈다.
line = 'From stephen.marquard@uct.ac.za Sat Jan 5:09:14:16 2020'
words = line.split()
email = words[1]
pieces = email.split('@')
print(pieces[1])
정규식을 이용한 소스는 아래와 같다.
import re
lin = 'From stephen.marquard@uct.ac.za Sat Jan 5:09:14:16 2020'
y = re.findall('^From .*@([^ ]*)', lin)
print(y)
간단히 설명을 하자면
- From 으로 시작하는 라인을 찾는다.
- From 다음에 공백이 하나 있고 그 이후 아무 문자가 와도 상관없다. (.*)
- @ 문자를 찾는다.
- ()로 쌓여있는 조건의 문자열만 추출한다.
- 공백이 아닌 문자가 반복되는 구간을 추출한다. 즉, 공백이 나올 때 까지의 문자열을 추출한다. ([^ ]*)
지금까지의 내용을 종합하여, 텍스트파일에서 특정 패턴을 찾고 그 패턴 중 가장 큰 값이 무엇인지 확인할 수 있다.
import re
hand = open('mbox-short.txt')
numlist = list()
for line in hand :
line = line.rstrip()
stuff = re.findall('^X-DSPAM-Confidence: ([0-9.]+)', line)
if len(stuff) != 1 :
continue
num = float(stuff[0])
numlist.append(num)
print('Maximum : ', max(numlist))
END
반응형