일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ADP 실기
- TooBigToInnovate
- 쿠버네티스
- do it
- 타입스크립트
- bigquery
- 대감집
- 심층신경망
- 머신러닝
- 리액트
- 프론트엔드
- python
- React
- 파이썬
- ADP
- Machine Learning
- frontend
- 구글
- Kaggle
- Kubernetes
- 차원 축소
- 빅쿼리
- LDA
- 최적화
- docker
- 대감집 체험기
- DBSCAN
- 캐글
- r
- 클러스터링
- Today
- Total
No Story, No Ecstasy
Regex (정규표현식) vs contains / find / in 본문
정규표현식(Regular Expression; RegEx)
- 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어를 의미한다.
- 그러나, RegEx를 통해 문자열을 찾는 속도는 C/C++의 string.find(), python의 ‘in’ operator보다 느리다.
- 따라서, 분명한 목적(복잡한 문자열 or 반복 사용 or 그룹 저장 등)이 있을 때 활용하는 것이 좋다.
- https://devopedia.org/regex-engines
그렇다면 정규표현식은 왜 속도가 느린걸까?
왜냐하면, compilation 단계와 cache 접근 단계를 거쳐야만 정규표현식을 활용할 수 있기 때문이다.
* Compilation이 필요한 이유:
- RegEx를 쓰는 주된 목적은 '재사용'하는 것이다.
- 언제든 해당 정규표현식을 재사용하기 위해 메모리 상에 캐싱해둘 필요가 있다.
- 즉, 처음 사용할 때는 메모리 상에 캐싱해두기 위한 컴파일 과정이 꼭 필요하다.
* 즉, RegEx를 활용하기 위해서는 cache 접근 단계도 필요하다.
그럼에도 불구하고 당연히 큰 장점을 가진다.
1. 한 번의 컴파일 후 재사용 가능
"성능 향상을 위해 정규식 엔진은 애플리케이션 수준의 컴파일된 정규식 캐시를 유지 관리합니다. 캐시는 정적 메서드 호출에만 사용되는 정규식 패턴을 저장합니다. 인스턴스 메서드에 제공된 정규식 패턴은 캐시되지 않습니다. 따라서 사용할 때마다 식을 고급 바이트 코드로 다시 구문 분석할 필요가 없습니다."
2. 조건에 맞는 문자열 그룹화(캡쳐) 가능
- "(subexpression)"과 같이 괄호를 활용하면, 문자열에서 원하는 패턴을 한 번에 캡쳐하여 확인할 수 있다.
- 매우 긴 문자열에서 여러 substring을 추출해야 할 경우 매우 간결한 코드로 모두 찾아낼 수 있다.
"여기서 subexpression 은 임의의 유효한 정규식 패턴입니다. 괄호를 사용하는 캡처는 정규식에서 여는 괄호의 순서에 따라 왼쪽에서 오른쪽으로 자동으로 번호(1부터 시작)가 매겨집니다. 번호가 0인 캡처는 전체 정규식 패턴에 의해 일치되는 텍스트입니다."
+다양한 RegEx 조건식의 Test가 가능한 링크
'Versus (vs) Series' 카테고리의 다른 글
Encoding Categorical Data (0) | 2021.03.12 |
---|