일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Github
- gas
- numpy
- Python
- Apache
- string
- math
- PySpark
- Tkinter
- SQL
- Redshift
- array
- PostgreSQL
- matplotlib
- PANDAS
- dataframe
- list
- Mac
- Excel
- Google Spreadsheet
- hive
- Java
- django
- Kotlin
- GIT
- Google Excel
- google apps script
- 파이썬
- c#
- Today
- Total
달나라 노트
Google Apps Script : match, search, 정규표현식 (문자열 찾기, 문자열 위치 찾기, 정규표현, regular expression) 본문
Google Apps Script : match, search, 정규표현식 (문자열 찾기, 문자열 위치 찾기, 정규표현, regular expression)
CosmosProject 2022. 12. 1. 20:43
String 객체의 match와 search는 String에서 특정 문자열을 찾아줍니다.
이 두 method의 사용법과 차이점을 봅시다.
Syntax
String.match(text/reg)
match method는 String에 적용할 수 있으며 1개의 parameter를 받습니다.
- text/reg
String에서 찾을 문자(text) 또는 정규표현식(reg, regular expression)입니다.
match method는 String에서 text/reg와 일치하는 문자를 찾아 그 문자를 array에 담아서 return해줍니다.
여기서 특이한 점은 정규표현식(regular expression)을 사용할 수 있다는 것이죠.
String.search(text/reg)
search method도 String에 적용할수 있습니다.
parameter도 1개를 받으며 이는 match method와 완전히 동일합니다.
다만 search는 text/reg와 일치하는 문자를 String에서 찾아서 찾아진 문자의 위치(index)를 return한다는 차이가 있습니다.
function myFunction(){
var test_string = 'Apple_Banana_Peach_Apple_Melon';
Logger.log(test_string.match('a'));
Logger.log(test_string.match('App'));
Logger.log(test_string.match('z'));
}
-- Result
[a]
[App]
null
- test_string.match('a')
test_string에 match method를 적용했고 parameter는 'a' 입니다.
따라서 test_string에서 a를 찾으라는 의미입니다.
Apple_Banana_Peach_Apple_Melon
test_string에서 a는 총 4개가 찾아집니다. (대문자 A는 소문자 a와는 다르다고 판별되어 대문자 A는 찾아지지 않습니다.)
a가 일단 찾아졌으니 a를 array에 담아서 return합니다.
그래서 결과를 보면 [a] 로 출력되는 것을 알 수 있습니다. (여러 개가 찾아져도 하나만 return됩니다.)
- test_string.match('App')
test_string에 match method를 적용했고 parameter는 'App' 입니다.
따라서 test_string에서 App을 찾으라는 의미입니다.
Apple_Banana_Peach_Apple_Melon
test_string에서 App는 총 2개가 찾아집니다.
텍스트가 일단 찾아졌으니 찾아진 App라는 텍스트를 array에 담아서 return합니다.
그래서 결과를 보면 [App] 로 출력되는 것을 알 수 있습니다. (여러 개가 찾아져도 하나만 return됩니다.)
- test_string.match('z')
test_string에서 z는 찾아지지 않습니다.
이러한 경우 match method는 null을 return합니다.
이번엔 search method입니다.
function myFunction(){
var test_string = 'Apple_Banana_Peach_Apple_Melon';
Logger.log(test_string.search('a'));
Logger.log(test_string.search('App'));
Logger.log(test_string.search('z'));
}
-- Result
7.0
0.0
-1.0
- test_string.search('a')
test_string에 search method를 적용했으며 parameter는 'a'를 받았습니다.
따라서 test_string에서 a를 찾으라는 의미입니다.
Apple_Banana_Peach_Apple_Melon
test_string에서 a는 총 4개가 찾아집니다. (대문자 A는 소문자 a와는 다르다고 판별되어 대문자 A는 찾아지지 않습니다.)
찾아진 텍스트 중 가장 왼쪽에 있는 문자의 위치를 return합니다.
Apple_Banana_Peach_Apple_Melon
따라서 Ba에 있는 a의 위치가 return됩니다.
- test_string.search('App')
test_string에 search method를 적용했고 parameter는 'App' 입니다.
따라서 test_string에서 App을 찾으라는 의미입니다.
Apple_Banana_Peach_Apple_Melon
test_string에서 App는 총 2개가 찾아집니다.
App는 2개가 찾아졌는데 이 중 더 왼쪽에 있는 App의 위치를 return합니다.
따라서 0이 return됩니다.
- test_string.search('z')
test_string에서 z는 찾아지지 않습니다.
이렇게 문자를 찾을 수 없는 경우 z를 return합니다.
match와 search method의 기본적인 사용법을 알아봤으니
정규표현식에 대해서 알아봅시다.
그냥 text만을 전달하면 text 그 자체만을 찾게 됩니다.
하지만 정규표현식을 이용하면 특정한 패턴과 맞는 텍스트를 찾을 수 있습니다.
예시를 먼저 보시죠.
function myFunction(){
var test_string = 'App le_Banana_12345Peach_Apple_Melon678910abe';
Logger.log(test_string.search(/pp.e/));
Logger.log(test_string.search(/[b-d]/));
Logger.log(test_string.search(/[bdl]/));
Logger.log(test_string.search(/[^a-cA-C]/));
}
-- Result
26.0
22.0
4.0
1.0
- test_string.search(/pp.e/)
parameter를 보시면 /pp.e/라는 특이한 문자가 적혀있습니다.
이것이 바로 정규표현식입니다.
정규표현식은 어떠한 문자열의 패턴을 나타내는 식입니다.
GAS의 정규표현식은 Javascript의 정규표현식 사용법과 동일합니다.
따라서 정규표현식을 적을 때에는 따옴표가 아닌 슬래쉬(/)를 양쪽으로 감싸서 표현해야합니다.
또한 /pp.e/에서 점.의 의미는 모든 텍스트 또는 모든 숫자 한글자를 의미합니다.
따라서 pp.e라는 것의 의미는
pp와 e 사이에 모든 텍스트/모든 숫자가 들어가있는 형태를 의미하죠.
pp.e의 패턴에 맞는 텍스트를 몇가지 예시로 들어보자면 아래와 같습니다.
ppae
ppze
pp5e
등등 위처럼 pp와 e 사이에 어떠한 문자나 숫자가 있는 것은 모두 pp.e 패턴에 해당됩니다.
단 점.은 하나의 글자를 의미하기 때문에 ppzzzze 이런것은 pp.e 패턴과는 다른 패턴으로 간주됩니다.
App le_Banana_12345Peach_Apple_Melon678910abe
test_string에서 pp.e 패턴을 찾아보자면 위처럼 두 번째 Apple의 pple가 찾아집니다.
첫 번쨰 App le은 pp와 e 사이에 공백과 l이라는 2개의 문자가 있으므로 패턴과 다릅니다.
따라서 두번째 Apple에 있는 pple의 위치인 26이 return됩니다.
- test_string.search(/[b-d]/)
일단 parameter를 보면 슬래쉬/로 감싸져있기 때문에 정규표현식이라는 것을 알 수 있습니다.
근데 슬래쉬 안에 [b-d]라고 적혀있습니다.
이렇게 대괄호 안에 무언가를 명시하면 대괄호 안에 있는 모든 문자 하나하나를 찾으라는 의미입니다.
또한 b-d는 알파벳순서대로 b부터 d까지를 의미합니다. 즉, b, c, d 3개의 문자를 의미하죠.
이를 종합하여보면 /[b-d]/는 b, c, d를 의미합니다.
따라서 test_string에서 b 또는 c 또는 d를 찾으라는 의미죠.
App le_Banana_12345Peach_Apple_Melon678910abe
test_string에서 b, c, d를 찾으면 위처럼 Peach의 c와 abe의 b 2개가 찾아집니다.
근데 더 앞쪽에 위치하는 Peach의 c 위치가 최종 결과로 return됩니다.
즉, 22가 결과로서 출력되는 것이죠.
- test_string.search(/[bdl]/)
parameter를 보면 /[bdl]/이라고 적혀있습니다.
일단 슬래쉬/로 감싸져 있으니 정규표현인 것을 알 수 있으며 대괄호가 있습니다.
대괄호의 의미는 대괄호 안에 있는 모든 문자 하나하나를 패턴으로서 찾으라는 의미입니다.
[bdl]의 의미는 바로 b, d, l이라는 알파벳을 찾으라는 의미죠.
App le_Banana_12345Peach_Apple_Melon678910abe
test_string에서 b, d, l을 찾으면 위처럼 총 3개가 찾아집니다.
그 중에서 가장 왼쪽에 있는 l의 위치가 return됩니다.
따라서 4가 출력됩니다.
- test_string.search(/[^a-cA-C]/)
parameter를 보면 슬래쉬로 감싸져있는 것을 보아 마찬가지로 정규표현식입니다.
그리고 대괄호가있죠.
대괄호 안에는 ^a-cA-C라고 적혀있습니다.
^의 의미는 좀 이따가 알아보고 a-cA-C의 의미부터 알아보죠
a-c는 a, b, c를 의미합니다.
그리고 A-C는 대문자 A, B, C를 의미합니다.
따라서 a-cA-C는 a, b, c, A, B, C를 뜻한다고 볼 수 있죠.
여기까지만 보면 test_string에서 a, b, c, A, B, C를 찾아라 라는 것으로 받아들일 수 있지만 앞에 ^기호가 있습니다.
^ 기호는 not이라고 보면 됩니다.
즉, 대괄호 안에 명시된 a-cA-C가 아닌 모든 문자를 의미합니다.
따라서 a, b, c, A, B, C를 제외한 모든 문자를 test_string에서 찾으라는 의미죠.
App le_Banana_12345Peach_Apple_Melon678910abe
test_string에서 a, b, c, A, B, C를 제외한 모든 문자를 찾으면 위 글자에서 빨간색으로 표시된 것들이 찾아집니다.
여기서 가장 왼쪽에 있는 것은 App의 p이므로 p의 위치인 index = 1이 return됩니다.
regular expression은 위처럼 사용할 수 있으며 regular expression에는 특수한 의미를 가진 기호들이 많이 존재합니다.
그 중 자주 사용되는 일부 기호들을 나타내보면 아래와 같습니다.
(참고로 regular expresstion에서 설명하는 문자는 단순히 알파벳, 숫자 뿐만 아니라 공백, 탭, 특수기호 등 컴퓨터에 존재할 수 있는 모든 문자를 의미합니다.)
Character | Meaning | Example |
[xyz] [a-c] |
대괄호 안에 묶인 문자들 각각을 의미 | [xyz] = x 또는 y 또는 z [a-c] = a 또는 b 또는 c |
^ | not을 의미. 보통 대괄호 내부에 쓰이며 특정 문자를 제외한 나머지 문자를 나타내도록 할 때 사용 |
[^xyz] = x, y, z가 아닌 모든 문자/숫자 [^a-c] = a, b, c가 아닌 모든 문자/숫자 |
. | 1개의 문자를 의미. | a, b, c, \n, \r, \t |
\d | 0에서 9까지의 숫자 1개를 의미 | [0-9] |
\D | 0에서 9까지의 숫자를 제외한 나머지 문자 1개를 의미 | [^0-9] |
\w | 대문자 알파벳, 소문자 알파벳, 0~9의 숫자, underscore를 의미 | [A-Za-z0-9_] |
\W | 대문자 알파벳, 소문자 알파벳, 0~9의 숫자, underscore를 제외한 나머지 문자를 의미 | [^A-Za-z0-9_] |
\s | 1개의 공백을 의미 (여기서 공백이란 space, tab, form feed, line feed(줄바꿈, \n) 등 Unicode에 존재하는 모든 공백을 의미함) | |
\S | 공백을 제외한 모든 문자를 의미 | [^/s] |
\t | 가로 탭을 의미 | |
\n | 줄바꿈 (Line feed) | |
{n} | 패턴의 n회 반복 | /[a-c]{3}/ 위 패턴은 a 또는 b 또는 c가 3번 연달아 존재하는 패턴을 의미함. aaa aba aca ccc bbb acb abc ... |
| | or | /sky|cloud/ 위 pattern은 sky 또는 cloud를 찾으라는 의미. |
더 자세한 pattern 기호들은 아래 링크를 참고하면 좋습니다.
Link = https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Character_Classes
'Google Apps Script' 카테고리의 다른 글
Google Apps Script : trim (문자 양쪽의 공백 제거) (0) | 2022.12.01 |
---|---|
Google Apps Script : replace (문자 대체하기, 문자 변경하기) (0) | 2022.12.01 |
Google Apps Script : indexOf (특정 문자의 위치 찾기) (0) | 2022.12.01 |
Google Apps Script : lastIndexOf (일치하는 가장 마지막 문자열 찾기) (0) | 2022.12.01 |
Google Apps Script : includes (문자 포함 여부 판단) (0) | 2022.11.30 |