http://localhost:8888/lab/tree/%ED%8C%8C%EC%9D%B4%EC%8D%AC%209.16%20(9).ipynb
match: 문자열 처음부터 검색
search: 문자열 전체를 검색
findall: 리스트로 돌려줌
finditer: 반복 가능한 객체를 돌려줌 interator 출력.
: group,start,end,span()
import re
a = "Life is too short"
p = re.compile("[A-z]+")
print(p.findall(a))
[^a-zA-Z0-9_ ] : \W
\d : [0-9]
data = """이름:김철수
전화번호 : 010-1234-1234
나이 : 30
성별 : 남 """
p = re.compile("\d+")
print(p.findall(data))
-> ['010', '1234', '1234', '30']
#(1)
s="black, blue and brown"
p = re.compile("black|blue")
print(p.findall(s))
import urllib.request as req
import re
req. urlopen("http://daum.net")
data = req. urlopen("http://daum.net").read().decode("utf-8")
정답:
data = req. urlopen("http://daum.net").read().decode("utf-8")
p = re.compile("https://\S+[.]js")
li = re.findall(p, data)
for i in li:
print(i)
순서(1)
# 아무것도 안나옴. 문장이 이어져있어서
p = re.compile(".js$")
li = re.findall(p, data)
for i in li:
print(i)
순서(2)
# .이 모든 걸로 나오는구나
p = re.compile(".js")
li = re.findall(p, data)
for i in li:
print(i)
순서(3)
# .내가 생각하는 .이 나옴
p = re.compile("[.]js")
li = re.findall(p, data)
for i in li:
print(i)
순서(4)
# 또는으로 연결
p = re.compile("h[:./\w]*[.]js")
li = p.findall(data)
for i in li:
print(i)
순서(5)
# h만 있는거 없애줄려고
p = re.compile("https[:./\w]*[.]js")
li = p.findall(data)
for i in li:
print(i)
#세개밖에 안나와서 정답이 정답일듯하다.
#전화번호
data = '010-1234-3434 '
p = re.compile('\d{3}-\d{3,4}-\d{4}')
print(p.findall(data))
-> ['010-1234-3434']
#이메일
data= '''prince@naver.com hello@daum.net morning@company.co.kr'''
a = re.compile(".+@[a-z]+[.][a-z]+")
li = a.findall(data)
for i in li:
print(i)
-> prince@naver.com hello@daum.net morning@company.co
a = re.compile("[\w]+@[0-9a-z]+[.][a-z.]+")
li = a.findall(data)
for i in li:
print(i)
-> prince@naver.com
hello@daum.net
morning@company.co.kr
#주민번호
data = '210202-2134765'
ii = re.compile("\d{6}[-][123456]\d{6}")
li = ii.findall(data)
li
-> ['210202-2134765']
i = re.compile("(\d{6})[-](\d{7})")
li = i.findall(data)
for i in li:
print(i)
-> ('210202', '2134765')
. 메타 문자는 줄바꿈 문자(\n)를 제외한 모든 문자와 매치되는 규칙이 있다.
만약 \n 문자도 포함하여 매치하고 싶다면 re.DOTALL 또는 re.S 옵션을 사용해 정규식을 컴파일하면 된다.
re.IGNORECASE 또는 re.I 옵션은 대소문자 구별 없이 매치를 수행할 때 사용하는 옵션이다
re.MULTILINE 또는 re.M 옵션은 조금 후에 설명할 메타 문자인 ^, 와 연관된 옵션이다. 이 메타 문자에 대해 간단히 설명하자면 ^는 문자열의 처음을 의미하고, $는 문자열의 마지막을 의미한다. 예를 들어 정규식이 ^python인 경우 문자열의 처음은 항상 python으로 시작해야 매치되고, 만약 정규식이 python이라면 문자열의 마지막은 항상 python으로 끝나야 매치된다는 의미이다.
지금껏 알아본 정규식은 매우 간단하지만 정규식 전문가들이 만든 정규식을 보면 거의 암호수준이다. 정규식을 이해하려면 하나하나 조심스럽게 뜯어보아야만 한다. 이렇게 이해하기 어려운 정규식을 주석 또는 줄 단위로 구분할 수 있다면 얼마나 보기 좋고 이해하기 쉬울까? 방법이 있다. 바로 re.VERBOSE 또는 re.X 옵션을 사용하면 된다.
http://localhost:8888/lab/tree/%ED%8C%8C%EC%9D%B4%EC%8D%AC%209.16%20(9).ipynb
-['http', 'https', 'ftp']만 뽑아라.
->{165}
p = re.compile("\w+(?=://)")
p.findall(text)
).+(?=
)")axis : 축
ex) (2,3) = (2행, 3열) / (axis0 , axis1)
numpy 왜 사용하냐?
:파이썬을 직접 하게 한다???. -
pandas:연산
pandas, sum
numpy 특징
※ 참조
1) import (p11)
import numpy as np
np.sum()
: 모듈(라이브러리)을 호출하여 속성과 메소드를 사용한다.
2) ndarray(배열이란)
#2개이상 숫자 들어가면 리스트로 묶어주어라
a=np.array([0,1,2,3])
a -> array([0, 1, 2, 3])
#1차원 자료 4개 들어있다.
print(a.shape)
-> (4,)
print(a.size) :원소의 개수
-> 4
type(a)
-> numpy.ndarray
print(a.dtype)
-> int32
-numpy만의 데이터 타입
3) array(배열:숫자만 들어감) vs matrix(행렬: 2차원만 가능)
둘의 연산법이 다르다.
#1차원
import numpy as np
a=np.array([0,1,2,3])
a
-> array([0, 1, 2, 3])
#몇차원이냐
print(a.ndim)
-> 1
#2차원
np.array([[1,2,3,4],[5,6,7,8]])
-> array([[1, 2, 3, 4],
[5, 6, 7, 8]])
#2행5열은 10 상태다. shape모양.
np.arange(10).reshape(2,5)
-> array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
#3행 4열은 12
np.arange(12).reshape(3,4)
-> array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
#-1은 자동으로 숫자 대입 의미
np.arange(12).reshape(3,-1)
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
#3차원
#종이 2장 3행 4열 임.
np.arange(24).reshape(2,3,4)
-> array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
#문제 {p31}
np.arange(36).reshape(3,4,3)
-> array([[[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]],
[[12, 13, 14],
[15, 16, 17],
[18, 19, 20],
[21, 22, 23]],
[[24, 25, 26],
[27, 28, 29],
[30, 31, 32],
[33, 34, 35]]])
element wise :원소들 끼리끼리
#노란색만 뽑아라
a=np.arange(25).reshape(5,5)
a[4]
->array([20, 21, 22, 23, 24])
#빨간줄만 뽑아라
a = np.arange(25).reshape((5, 5))
a[:,(1, 3)]
-> array([[ 1, 3],
[ 6, 8],
[11, 13],
[16, 18],
[21, 23]])
#파란칸만 뽑아라
a = np.arange(25).reshape((5, 5))
a[[1, 1, 3, 3], [0, 2, 0, 2]]
-> array([ 5, 7, 15, 17])
#만약 이거라면
a = np.arange(25).reshape((5, 5))
a[1::2, 0::2]
-> array([[ 5, 7, 9],
[15, 17, 19]])
출처:
https://walkingplow.tistory.com/32
https://wikidocs.net/4308#multiline-m -> 점프 투 파이썬