728x90
더보기

오늘은 파이썬을 통한 몇가지의 정규 표현식에 관하여 글을 적고자 합니다. 

일단 글 쓰기에 앞서, 저는 자바로 취업을 하였지만 회사의 요구에 의해 파이썬으로 다시 개발을 하고있는 0년차 개발자입니다. 

많은 블로그들이 양질의 글들을 공유를 하고있어서 정규 표현식의 모든것들을 설명하지 않으려고합니다 양해 부탁드립니다. 

정규 표현식

                     

                             정규 표현식( regular expression, as regexp or regex, rational expression)정규식은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다. 정규 표현식은 많은 텍스트 편집기와 프로그래밍 언어에서 문자열의 검색과 치환을 위해 지원하고 있으며, 특히 과 Tcl은 언어 자체에 강력한 정규 표현식을 구현하고 있다.

 

컴퓨터 과학의 정규 언어로부터 유래하였으나 구현체에 따라서 정규 언어보다 더 넓은 언어를 표현할 수 있는 경우도 있으며, 심지어 정규 표현식 자체의 문법도 여러 가지 존재하고 있다. 현재 많은 프로그래밍 언어, 텍스트 처리 프로그램, 고급 텍스트 편집기 등이 정규 표현식 기능을 제공한다. 일부는 자바스크립트루비Tcl처럼 문법에 내장되어 있는 반면 닷넷 언어자바파이썬POSIX CC++ (C++11 이후)에서는 표준 라이브러리를 통해 제공한다.

그 밖의 대부분의 언어들은 별도의 라이브러리를 통해 정규 표현식을 제공한다.

정규 표현식은 검색 엔진워드 프로세서와 문서 편집기의 찾아 바꾸기 대화상자, 그리고 sedAWK와 같은 문자 처리 유틸리티, 어휘 분석에 사용된다.

-위키백과-


기본 개념 
             

주로 패턴(pattern)으로 부르는 정규 표현식은 특정 목적을 위해 필요한 문자열 집합을 지정하기 위해 쓰이는 식이다. 문자열의 유한 집합을 지정하는 단순한 방법은 문자열의 요소나 멤버를 나열하는것이다. 
3개의 다른 문자열이 포함하는 집합은 패턴으로 지정이 가능하며 이러한 패턴은 3개의 문자열을 각각 일치(match)시킨다고 합니다. 

예를 들면 ) "Handel", "Händel", "Haendel" 을 H(ä|ae?)ndel 으로 지정가능합니다. 

 

Boolean "|" or 이라고 표현하는 수직선은 여러 항목 중 선택하기 위해 구분합니다. gray|grey 는 둘중 하나의 값이 일치하는것입니다. 

 

group()괄호를 사용하면 연산자의 범위와 우선권을 정의할수 있습니다. 예를들어 gray|grey 와 gr(a|e)는 gray and grey 집합을 둘 다 기술하는 동일 패턴입니다.

 

물음표 ? 는 0번 또는 1차례까지의 발생을 의미한다. 이를테면 colou?r는 "color"와 "colour"를 둘 다 일치시킨다.

별표 * 는 0번 이상의 발생을 의미한다. 이를테면 ab*c는 "ac", "abc", "abbc", "abbbc" 등을 일치시킨다.

덧셈 기호 + 는 1번 이상의 발생을 의미한다. 이를테면 ab+c는 "abc", "abbc", "abbbc" 등을 일치시키지만 "ac"는 일치시키지 않는다.

 

{n} 정확히 n 번만큼 일치시킨다.

{min, } 는 min 번 이상만큼 일치 시킵니다. 

{min, max} 는 적어도 "min"번만큼 일치 시키지만 "max"번을 초과하여 일치시키지는 않는다.

 

더보기

제가 이 블로그에 글을 적는것보다 가독성이 더 좋은 위키백과 링크를 달아드리겠습니다. 

https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D

 

이제 정규 표현식으로 원하는 값을 가져와봅시다. 

일단 제가 정규표현식을 사용해서 무엇을 했는지에 대해 간단하게 소개해드리겠습니다. 

Udemy로 제가 수업듣고있는 엘라스틱서치의 강의 제목과 시간을 가져와서 Excel파일로 스케쥴을 만들고싶었습니다. 

대충 총 145개의 강의로 이루어져있고 제목 그리고 시간을 가져오고싶었습니다.

 

제가 쓴 정규표현식으로는 (\w+),[^분0-9\s] 입니다.  []정규표현식을 표현할때 ^ 는 부정입니다.

즉 ^a-z 이면 a-z  빼고 라는 의미입니다. 

 

 

 

Elasticsearch Answers: The Complete Guide to Elasticsearch

Learn Elasticsearch from scratch and begin learning the ELK stack (Elasticsearch, Logstash & Kibana) and Elastic Stack.

www.udemy.com

 

 

페이지에서 드래그로 copy 했을때 처음 값은 대충 이런 모습이었습니다. 

밑에 문법에서는 ##분 의 값과 \s(space 를 표현하며 공백 문자를 의미한다.) 만 출력하는 식입니다. 

findall 로 '분'을 포함한 값을 찾아주고 리스트 시킵니다. 

이후에 for문으로 text에 '분' 포함되면 값을

저장해주라고 합니다 .

print(text) 를 하면 리스트화 되어서 값이 나오지만 *text에 \n을 주게되면 값의 출력이 세로로 나오게 됩니다. 

값을 평범하게 print(text)로 하게되면 list 형태로 값이 나온다. 

문장 또한 마찬가지로 영단어만 필요하기에 [^A-Za-z] 해주시면 쉽게 값을 가져올수있습니다. 

더보기

 

#re의 기능중 하나인 sub(자르기)로 정규표현식 사용
text = re.sub(r'[^분0-9]','',text)
'''text에서 분과 숫자를 제외한것을 잘라서 '' <- 즉 공백없게 만들어라
그리고 re에 다른 기능인 findall(은 정규식과 매치되는 모든 문자열을 리스트형식으로 리턴한다.)
사용하여서 '(\w+)분?' (\w+)는 숫자와 모든 언어를 포함하는것 분? 는 분을 포함하는 것
즉 모든숫자단어+분이 포함되는 것을 찾아주라는 기능입니다. '''
text=re.findall(r'(\w+)분?',text)
# 그 이후 for 문으로 만약 분이 포함된다면 값을리스트해주라는 얘기입니다.
text = [s for s in text if '분' in s]
'''그리고 print를 해주면되는데 여기서 리스트로 되어있는 text변수를 *text,sep='\n'을 해줌으로써 
리스트의 세로출력이 완성이 됩니다. for 루프를 돌리거나 pprint 모듈을 임포트하지 않고도, 
한 줄의 코드로 처리할 수 있어서 매우 편리하지 않나요?
우선 배열 앞에 * 연산자를 붙여서 함수를 호출하면 마치 여러 개의 인자를 넘긴 효과가 납니다.
그리고 print() 함수에는 가변 길이의 인자를 넘길 수 있는데요. 
기본적으로는 공백을 구분자로 사용합니다.
sep 옵션으로 이 구분자를 다른 문자로 바꿀 수가 있습니다.'''

 

728x90

'Language > python' 카테고리의 다른 글

numpy -인덱싱 / 슬라이싱  (0) 2022.06.21
numpy - ndarray 데이터 형태 바꿔보기  (0) 2022.06.21
numpy- 기초  (0) 2022.06.21
파이썬 기초-3(입출력문)  (0) 2022.06.15
파이썬 기초 -2  (0) 2022.06.15
728x90

 

2차원 인덱싱입니다. 23번째 보시면 0번째안에 배열2를 가져오면 1행의 3열을 가져옵니다. 

 

3차원 인덱싱입니다. 

1차원 벡터 슬라이싱 

2차원 벡터 슬라이싱 

 

 

위 그림을 보시면 차원이 줄어드는것을 보실수있습니다.

x[0,:2]형태는 똑같아 보이지만 행렬이 아닌 벡터인것이다. 

 

 

3차원 벡터 슬라이싱

 

728x90

'Language > python' 카테고리의 다른 글

파이썬 정규식 표현(Regex)이용한 시간표 정리  (0) 2022.09.16
numpy - ndarray 데이터 형태 바꿔보기  (0) 2022.06.21
numpy- 기초  (0) 2022.06.21
파이썬 기초-3(입출력문)  (0) 2022.06.15
파이썬 기초 -2  (0) 2022.06.15
728x90

ravel,np.ravel : 다차원배열을 1차원으로 변경

'order'파라미터 

-'C' - row 우선 변경

'F' - column 우선변경

Flatten 
다차원 배열을 1차원으로 변경
ravel 과의 차이점: copy 를 생성하여 변경함(즉 원본 데이터가 아닌 복사본을 반환)
'order'파라미터
'c' -row 우선 변경
'F'-column 우선변경

ㅐ부

내부적으로 변경이냐아니냐 이고 

데이터에 변경되는게 중요하지 않으면 아무거나 쓰고 중요하면 flatten 을 사용해서 복사본을 사용하자! 

 

ravel 에는 중요한 함수가 있습니다. order! order 라고 하는 값은 C값이다. 

다시 한번 호출된걸 보자 

이해가 가시나요? 행과 열의 기준으로 값을 나타냅니다. 

reshape 함수 

  • array 의 shape 을 다른 차원으로 변경
  • 주의할점은 reshape 한 후의 결과의 전체 원소 개수와 이전 개수가 같아야 가능
  • 사용 예) 이미지 데이터 벡터화 - 이미지는 기본적으로 2차원 혹은 3차원 (RGB)이나 트레이닝을 위해 1차원으로 변경하여 사용됨. 

곱이 맞지 않으면 값이 맞지 않아서 오류를 발생한다. 

 

 

728x90

'Language > python' 카테고리의 다른 글

파이썬 정규식 표현(Regex)이용한 시간표 정리  (0) 2022.09.16
numpy -인덱싱 / 슬라이싱  (0) 2022.06.21
numpy- 기초  (0) 2022.06.21
파이썬 기초-3(입출력문)  (0) 2022.06.15
파이썬 기초 -2  (0) 2022.06.15
728x90

numpy 를 사용하는 이유

- 성능 : 파이썬는 기본 리스트보다 빠름

- 메모리 사이즈: 파이썬 리스트보다 적은 메모리 사용( 더 많은 데이터를 넣어서 많이 로딩할수있어서)

- 빌트인 함수: 선형대수, 통계관련 여러 함수 내장

ndarray - C언어가 기본으로 되어있다. 생성 당시에 연속적인 메모리에 잡히게된다. 

 

vectorization 라고 ndarray 를 한덩어리생각하고 연산하기 때문에 중요하다 .

Vectorization 개념이 정말 중요하다. 

numpy 를 이용해서 1~100까지 array 를 한덩이라 생각해서 한번에 연산을 하게 하는것이다.   

matplotlib 은 주피터안에서 간단하게  그래프를 그려준다. 

ndarry 데이터 생성하기 (random 서브모듈)

seed 함수 - 랜덤한 값을 동일하게 다시 생성하고자 할때 사용한다 즉 랜덤이지만 고정된 랜덤값이다. 

즉 시드안에 넣은 숫자를 실행후 랜덤값을 넣으면 그 시드안에 넣은값에 랜덤값이 저장이 된다 그래서 동일한 값을 부를수있다.

0~99까지의 주어진 정수에서 샘플링한 값을 가져와라는 뜻이다. 

주어진 값 안에 랜덤으로 주어진 사이즈로 나온다. 

 

728x90

'Language > python' 카테고리의 다른 글

numpy -인덱싱 / 슬라이싱  (0) 2022.06.21
numpy - ndarray 데이터 형태 바꿔보기  (0) 2022.06.21
파이썬 기초-3(입출력문)  (0) 2022.06.15
파이썬 기초 -2  (0) 2022.06.15
파이썬 기초 -1  (0) 2022.06.14
728x90

출력문 - print() 내장함수

자바와 다르게 print() 이 문자로 출력을 합니다. 

print() 함수는 괄호의 내용을 출력한다. 

출력하고자 하는 ㄱ밧이 여러개이 ㄴ경우에는 콤마로 구분할 수 있으며,

출력할때 각각의 값 사이에 공백 한개가 추가된다. 

문자열을 출력하려면 홑따옴표 또는 쌍따옴표를 이용한다. 

 

변수에 저장된 값 출력하기 

>>> a = 100 ; b = 200
>>> c = a + b
>>> print(a,b,c) # 콤마에 공백이 추가된다.
100 200 300
>>> print(a+b) # 수치 연산자는 계산 결과를 보여준다.
300
>>> print(a+50)
150

문자열 출력하기 

>>> print('hello world!')
hello world!
>>> print('hello', 'world!') # 콤마에 공백이 추가된다.
hello world!
>>> print('hello' + 'world!')
helloworld!
>>> movie = 'toy story'
>>> print(movie)
toy story
>>> movie
'toy story

>>> x = '5'
>>> y = 5
>>> print(x)
5
>>> print(y)
5
>>> x
'5'
>>> y
5

 
+연산자 출력

>>> print('hello' + 100) # 에러
>>> print('hello' + str(100))
hello100
>>> x = '10'
>>> n = 100
>>> n + x # 에러
>>> n + int(x)
110

% 이용한 서식 출력 

 

출력문 - % 이용한 서식 출력 ( 문자열, 정수)

 

문자열 : %s

정수 : %d

실수: %f

 

print(    '    위게 3개의 값을 여기에 대입하면됩니다.       '    %(,)) 

>>> name = 'Alice' ; score = 95
>>> print('%s got %d score' % (name, score))
Alice got 95 score
>>> print('%10s got %5d score' % (name, score))
Alice got 90 score
문자열 : %s
정수 : %d
실수 : %f
print(' ' % ( , ) )
(10칸 잡아서 Alice 출력, 5칸 잡아서 90 출력)

% 이용한 서식출력(실수)

입력문 - input() 함수

키보드로부터 입력을 받는다. 

필요하다면 입력 받은 데이터의 자료형을 적절히 변환해야한다.

>>> x = input('Enter x : ')
Enter x : 10 ← 10이 변수 x 에 저장된다.
>>> print(x)
10
>>> x
'10'
>>> type(x) # 입력받은 데이터는 항상 문자열로 처리한다.
<class 'str'>

 

>>> x = input('정수를 입력하시오 : ')
정수를 입력하시오 : 15
>>> x + 10
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
x + 10
TypeError: Can't convert 'int' object to str implicitly
>>> int(x) + 10
25

 일반적으로 다음과 같이 이용한다.

>>> x = int(input('Enter one integer : '))
Enter one integer : 100
>>> type(x)
<class 'int'>
>>> y = float(input('Enter one float number : '))
Enter one float number : 3.14
>>> type(y)
<class 'float'>

 

 

 

728x90

'Language > python' 카테고리의 다른 글

numpy -인덱싱 / 슬라이싱  (0) 2022.06.21
numpy - ndarray 데이터 형태 바꿔보기  (0) 2022.06.21
numpy- 기초  (0) 2022.06.21
파이썬 기초 -2  (0) 2022.06.15
파이썬 기초 -1  (0) 2022.06.14

+ Recent posts