끵뀐꿩긘의 여러가지

정규표현식 본문

Naver boostcamp -ai tech/week 01

정규표현식

끵뀐꿩긘 2022. 9. 20. 23:29

출처: https://ccambo.blogspot.com/2014/10/regular-expression.html

 

[ 일반 ] 정규식 (Regular Expression)에 대한 간단 정리

 

ccambo.blogspot.com

 

정규 표현식 규칙

 * 정규 표현식의 Dot(.) 메타 문자는 줄바꿈 문자인 \n을 제외한 모든 문자와 매치됨을 의미한다.

 표현식
의미 
 ^x
 문자열의 시작을 표현하며 x 문자로 시작됨을 의미한다.
x$
 문자열의 종료를 표현하며 x 문자로 종료됨을 의미한다.
 .x
 임의의 한 문자의 자리수를 표현하며 문자열이 x 로 끝난다는 것을 의미한다.
 x+
 반복을 표현하며 x 문자가 한번 이상 반복됨을 의미한다.
 x?
 존재여부를 표현하며 x 문자가 존재할 수도, 존재하지 않을 수도 있음을 의미한다.
 x*
 반복여부를 표현하며 x 문자가 0번 또는 그 이상 반복됨을 의미한다.
 x|y
 or 를 표현하며 x 또는 y 문자가 존재함을 의미한다.
 (x)
그룹을 표현하며 x 를 그룹으로 처리함을 의미한다.
 (x)(y)
그룹들의 집합을 표현하며 앞에서 부터 순서대로 번호를 부여하여 관리하고 x, y 는 각 그룹의 데이터로 관리된다.
 (x)(?:y)
그룹들의 집합에 대한 예외를 표현하며 그룹 집합으로 관리되지 않음을 의미한다. 
 x{n}
 반복을 표현하며 x 문자가 n번 반복됨을 의미한다.
 x{n,}
 반복을 표현하며 x 문자가 n번 이상 반복됨을 의미한다.
 x{n,m}
 반복을 표현하며 x 문자가 최소 n번 이상 최대 m 번 이하로 반복됨을 의미한다.
[xy]
문자 선택을 표현하며 x 와 y 중에 하나를 의미한다.
 [^xy]
not 을 표현하며  x 및 y 를 제외한 문자를 의미한다.
 [x-z]
range를 표현하며 x ~ z 사이의 문자를 의미한다. 
 \^
escape 를 표현하며 ^ 를 문자로 사용함을 의미한다.
 \b
word boundary를 표현하며 문자와 공백사이의 문자를 의미한다.
 \B
non word boundary를 표현하며 문자와 공백사이가 아닌 문자를 의미한다.
 \d
digit 를 표현하며 숫자를 의미한다. 
 \D
non digit 를 표현하며 숫자가 아닌 것을 의미한다. 
 \s
space 를 표현하며 공백 문자를 의미한다. 
 \S
non space를 표현하며 공백 문자가 아닌 것을 의미한다.
 \t
tab 을 표현하며 탭 문자를 의미한다.
 \v
vertical tab을 표현하며 수직 탭(?) 문자를 의미한다. -> vertical tab을 나타내고 무의미
 \w
word 를 표현하며 알파벳 + 숫자 + _ 중의 한 문자임을 의미한다. 
 \W
non word를 표현하며 알파벳 + 숫자 + _ 가 아닌 문자를 의미한다. 
 g
Global 의 표현하며 대상 문자열내에 모든 패턴들을 검색하는 것을 의미한다. 
 i
Ignore case 를 표현하며 대상 문자열에 대해서 대/소문자를 식별하지 않는 것을 의미한다.
 m
Multi line을 표현하며 대상 문자열이 다중 라인의 문자열인 경우에도 검색하는 것을 의미한다. 

\b와 \B:

https://ohgyun.com/392

 

정규식 단어 경계 메타 문자 \b 의 정확한 이해

발생일: 2013.02.18 문제: 우리 부부는 주말마다 커피숍에 가서 책을 읽는데, 어제는 날이 좋아서 남양주에 있는 고당이라는 카페로 나들이를 갔다. 작년에 한 번 다녀왔던 곳인데, 한옥 카페이고

ohgyun.com

 

참고:

https://velog.io/@koseungbin/%EC%A0%95%EA%B7%9C-%ED%91%9C%ED%98%84%EC%8B%9D

 

정규 표현식

정규 표현식은 특정한 규칙을 가진 문자열 집합을 표현하는데 사용하는 형식 언어이다. > 정규 표현식은 패턴(pattern)으로 특정 목적을 위해 필요한 문자열 집합을 지정하기 위해 쓰이는 식이다.

velog.io

정규 표현식 시각화:

https://regexper.com/#%28%3F!%5Cbto%5Cb%29

 

Regexper

 

regexper.com

정규식 연습장:

https://regexr.com/

 

RegExr: Learn, Build, & Test RegEx

RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).

regexr.com

 

- 자주 사용되는 정규표현식


한글만:  /^[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]$/g

영어만:  /^[a-zA-Z]$/g

숫자만:  /^[0-9]$/g

한글 금지:  /^[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]$/g

영문자 금지:  /^[^a-zA-Z$/g

숫자 금지:  /^[^0-9]$/g

특수문자:  /[\[\]{}()<>?|`~!@#$%^&*-_+=,.;:\"\\\'\\]/g

아이디 (영문소문자+숫자 4~12자리, 영문소문자로 시작):

/^[a-z][a-z0-9_-]{3,11}$/

비밀번호 (영문대소문자+숫자 6~18자리):

/^[A-Za-z0-9_-]{6,18}$/

이름:  /^[가-힝]{2,4}$/

전화번호('-'포함): /^\d{2,3}-\d{3,4}-\d{4}$/

이메일: /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i;

IP주소:  /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/

대문자만:  /^[A-Z]$/g

소문자만:  /^[a-z]$/g

URL주소:  /^(https?:\/\/)?([a-z\d\.-]+)\.([a-z\.]{2,6})([\/\w\.-]*)*\/?$/

 

 - python 정규표현식

import re # 정규표현식 모듈
p = re.compile('ab*') # 정규표현식 compile

# match: 문자열의 처음부터 정규식과 매치되는지 조사, 매치되면 match객체 return, 아니면 None return
m = p.match("python") 

# search: 문자열의 처음부터 정규식과 매치되는 문자열을 검색
m = p.search("python")

# findall: 정규식과 매치되는 모든 문자열을 검색해서 리스트로 return
result = p.findall("life is too short")

# finditer: 정규식과 매치되는 모든 문자열을 검색해서 iterator로 return
result = p.finditer("life is too short")

# sub: 매치된 부분을 치환, subn(): 치환처리된 문자열과 치환된 부분의 개수 반환
result = re.sub(r'([a-z]+)@([a-z]+)\.com', r'\1@\2.net', text)
print(result)
>>> aaa@xxx.net, bbb@yyy.net, ccc@zzz.net

result = re.subn(r'[a-z]+@[a-z]+\.com', 'new-address', text)
print(result)
>>> ('new-address, new-address, ccc@zzz.net', 2)

# split: 패턴에 매치되는 부분으로 문자열 분할
s = '111aaa222bbb333'
result = re.split('[a-z]+', s)
print(result)
>>> ['111', '222', '333']


# match 객체의 메서드
m.group() # 문자열 return
m.start() # 시작위치 return 
m.end() # 끝 위치 return
m.span() # (시작, 끝) 튜플 reutrn

정규식 컴파일 옵션

  • DOTALL(S) - . 이 줄바꿈 문자를 포함하여 모든 문자와 매치할 수 있도록 한다.
  • IGNORECASE(I) - 대소문자에 관계없이 매치할 수 있도록 한다.
  • MULTILINE(M) - 여러줄과 매치할 수 있도록 한다. (^, $ 메타문자의 사용과 관계가 있는 옵션이다)
  • VERBOSE(X) - verbose 모드를 사용할 수 있도록 한다. (정규식을 보기 편하게 만들수 있고 주석등을 사용할 수 있게된다.)
# ex)
p = re.compile('a.b', re.DOTALL)
p = re.compile(r'\\section') # 파이썬 백슬래시 문제로 주로 rawstring을 사용하여 정규표현식을 나타낸다

 

정규표현식 십자말풀이

https://regexcrossword.com/

 

Regex Crossword

A crossword puzzle game using regular expressions. Earn achievements completing puzzle challenges. Easy tutorials for people new to regular expressions.

regexcrossword.com

 

'Naver boostcamp -ai tech > week 01' 카테고리의 다른 글

선형대수학  (1) 2022.09.22
pandas  (0) 2022.09.21
Numpy  (1) 2022.09.21
CSV, XML, JSON data 파이썬으로 핸들링하기  (1) 2022.09.20
부족한 python 채우기  (1) 2022.09.20
Comments