문자열 검색이나 입력된 문자열이 정해진 포멧에 적합한지 확인

 

정규식 테스트 사이트

https://regex101.com

 

regex101: build, test, and debug regex

Regular expression tester with syntax highlighting, explanation, cheat sheet for PHP/PCRE, Python, GO, JavaScript, Java. Features a regex quiz & library.

regex101.com

https://regexr.com

 

RegExr: Learn, Build, & Test RegEx

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

regexr.com

 

@ 정규식
- /.../ 속에 패턴을 표시
- \d : 0부터 9까지 숫자
- \w : 숫자와 문자(대소문자 포함), _ 포함
- \s : 공백문자
- . : \n을 제외한 모든 문자
- . : . 문자, [] 안에서 사용시
- \. : . 문자, [] 밖에서 사용시 
- [] : []속에 글자들은 순서에 관계없이 한글자를 표현 
- ? : 0 또는 1번 발생
- * : 0 또는 여러번 발생
- + : 1번 이상 발생
- {n} : n번 발생 
- {1,2} : 1번 또는 2번 발생
- [a-zA-Z0-9.-] : 영문 대소문자, 숫자, ., - 중 1글자
- [a-zA-Z0-9.-]+ : 영문 대소문자, 숫자, ., - 를 사용하는 1글자 이상
- \.(com|net|co.kr) : .com 또는 .net 또는 .co.kr
- ^ : 시작을 표시
- $ : 끝을 표시 
- \b : 바운더리를 표현, 시작과 끝에 표현
- r'...' : '...'안에 이스케이프(\) 문자 없이 문자 자체로 인정

 

@ 정규식 패턴 검색
- match() : 원하는 문자열 패턴으로 소스 문자열과 일치하는지 비교
  result = re.match('hello', 'hello world')  # 'hello'는 패턴, 'hello world'는 확인할 소스 문자열
  result가 None이면 매칭이 실패했다는 의미 
- 패턴을 미리 컴파일 할 수 있다
  mypattern = re.compiler(r'\d\d\d-\d\d\d\d-\d\d\d\d')
- search() : 첫번째 일치하는 객체를 반환
- findall() : 모두 일치하는 문자열을 리스트로 반환
- split() : 패턴에 맞게 소스를 쪼갠후 문자열 조각의 리스트를 반환
- sub() : 바꾸기 기능, 패턴과 일치하는 소스의 부분을 대체인자로 변경

 

  # 정규식 그룹핑 : 괄호를 사용하여 정규식에 그룹을 생성할 수 있다.
  # 만약 () 문자 자체를 사용하려면 \(, \) 를 사용
  import re
  phonenum_regex = re.compile(r'(\d\d\d)-(\d\d\d\d)-(\d\d\d\d)')
  mo = phonenum_regex.search('My number is 010-3333-4444')
  print(mo.group()) # 010-3333-4444
  print(mo.group(0))  # 010-3333-4444
  print(mo.group(1))  # 010
  print(mo.group(2))  # 3333
  print(mo.group(3))  # 4444
  first, second, third = mo.groups()
  print(first + ' ' + second + ' ' + third) # 010 3333 4444
  # 정규식 이메일 예제
  import re
  email_regex = re.compile(r'''(
    [a-zA-Z0-9._%+-]+       # username
    @			                  # @ symbol
    [a-zA-Z0-9.-]+		      # domain name
    (\.[a-zA-Z]{2,4}){1,2}	# dot-something, .co.kr, .com, .net
    )''', re.VERBOSE)
  # re.I : 대소문자 구분 안함 
  # re.VERBOSE : 복잡한 정규식 표현
  em = email_regex.search('제 이메일 주소는 aaa111@naver.com 입니다. 다른 메일은 cc343@kakao.com 입니다.')
  print('email object:',em)
  print('email:', em.group(), em.start(), em.end(), em.span())
  em2 = email_regex.findall('제 이메일 주소는 aaa111@naver.com 입니다. 다른 메일은 cc343@kakao.com 입니다.')
  print('emails:', em2)

출력값

email object: <re.Match object; span=(10, 26), match='aaa111@naver.com'>
email: aaa111@naver.com 10 26 (10, 26)
emails: [('aaa111@naver.com', '.com'), ('cc343@kakao.com', '.com')]

 

 

 

+ Recent posts