Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- AWS EC2
- 시행착오
- android exoplayer
- ListAdapter DiffUtil
- 유튜브
- exoplayer cache
- getChangePayload
- doc2vec
- ChatGPT
- Zsh
- DiffUtil.ItemCallback
- android ktor
- android
- video caching
- 안드로이드
- Python
- ExoPlayer
- list map
- ListAdapter
- map
- kotlin list
- 스피너
- android custom view
- ktor client
- build with ai
- 유튜브 요약
- FastAPI
- llm
- kotlin collection
- ktor api call
Archives
- Today
- Total
버튼 수집상
[CS] 정규표현식 Basic Regex 본문
매번 ChatGPT한테 물어보기가 귀찮아서 중요한 부분을 기억하기 위해 기록.
정규표현식 체크는 아래 사이트에서.
.NET Regex Tester - Regex Storm
Home Tester Reference About
regexstorm.net
- raw string
python
print(r'abcedf\n')
# abcdef\n
kotlin
print("""abcdef\n""")
// abcdef\n
패턴값은 대부분 raw string으로 표현.
escape 문자열 때문.
- 키워드
"\" : 문자 리터럴 그대로 (ex: 점 \.)
"." 모든 문자
"\d" : 숫자 하나
"\D" : 숫자 아닌것
"\s" : 공백 하나
"\S" : 공백 아닌 것
"\w" : 문자 하나
"\W" : 문자 아닌것
"\b" : 한 단어
-> 이 부분에서 구글 search console의 크롤러가 계속 이스케이프 시퀀스 에러를 냈었다.
지금은 해결
[] : or 조건 한 자리
re.search(r'[abc]aron', 'aaron')
# match 'aaron'
[a-z] : 범위 한 자리
re.search(r'[0-4]aa', '5aa')
# None
[^] : 조건 해당 안함
re.search(r'[^abc]', 'aaron')
# None
- 반복패턴
+: 1번 이상
*: 0번 이상
?: 있거나 없거나
{}: 반복 횟수 명시
{3}: 3번 반복
{1,3}: 최소 1번, 최대 3번
- 문자 위치
^~: 문자열의 맨 앞에서부터 일치하는 경우 검색
~$: 문자열의 맨 뒤에서부터 일치하는 경우 검색
re.search(r'^a', "ayo gg")
# match 'a'
re.search(r'g$', "ayo gg")
# match 'g'
re.search(r'^a.*g$', "ayo gg")
# match 'ayo gg'
-> 단어 기준이 아니라 문자열 기준이라 생각보다 쓸 데가 없을지도...?
- grouping ()
()로 묶는다
# 이메일 주소 정규표현식
re.search(r'(\w+)\@([^.]+(?:\.[^.]+)+)', "abcd@gmail.com")
# (\w+) : 한 자리 이상 글자 -> abcd
# \@ : 골뱅이 문자 리터럴
# [^.]+ : '.'아닌 한 자리 이상 글자 -> gmail
# (?:\.[^.]+)+) : '.'뒤에 이어지는 '.' 아닌 글자 (근데 하나 이상도 됨) -> .com
# 마지막 grouping 바깥에 +를 붙인 이유: 도메인이 길어질 수도 있기 때문
# 예시) test.mail@mail.co.uk
- 단어 포함
(cat | dog) : cat, dog 두 단어 중 하나 포함
re.search(r'((c\w*\b)|dog)', 'cat, dog, chat, kite')
# match 'cat', 'dog', 'chat'
# c\w* : c로 시작하는 한 글자 이상의 글자
# \b : 한 단어로 끊어줌
# ((c\w*\b)|dog) : c로 시작하는 단어 혹은 dog
- non-greedy matching
최소한으로 매칭시킴
input = '<html>haha</html>'
re.search(r'<.+>', input)
# match '<html>haha</html>'
re.search(r'<.+?>', input)
# match '<html>'
자주 쓰는 정규표현식
"문자열"
(["'])(?:(?=(\\?))\2.)*?\1
혹은
(["']).*\1
JSON 문자열 키
"키값": (["'])(?:(?=(\\?))\2.)*?\1,
JSON 정수 키
"키값": ([0-9]+),
[대괄호]
\[[^\]]*\]|\[\.\.\]
00:00 (타임스탬프)
[0-9]{1,2}:[0-9]{1,2}
\1 : 첫번째 grouping을 가리킨다
728x90
'TIL - CS' 카테고리의 다른 글
[CS] mounting이란 (0) | 2024.01.30 |
---|---|
[CS] payload란 (0) | 2023.07.13 |
[CS] heuristic이란 (0) | 2023.07.11 |
[CS] predicate란 (0) | 2023.06.26 |