본문 바로가기

PYTHON/Basic

regex

정규표현식

  • 문자열을 처리할 때 특정 패턴으로 문자열 처리하는 방법

  • 정규표현식 함수

    • match : 가장 앞에서부터 일치하는 패턴 찾기
    • search : 문자열에서 일치하는 가장 첫번째 패턴 찾기
    • findall : 문자열에서 일치하는 모든 패턴 찾기
    • split : 문자열에서 특정 패턴으로 나누기
    • sub : 특정패텬에 맞는 문자열 대체하기
  • pattern

    • 문자

      • \d : 숫자 (\D: 숫자 외)
      • \w : 숫자, 문자, _ (\W : 문자, 숫자, _ 외)
      • \s : 공백문자 (\S : 공백문자 외)
    • 지정자

      • [] : 문자 묶음
      • - : 범위
      • . : 하나 문자
      • ? : 0~1회
      • * : 0회 이상
      • + : 1회 이상
      • {m} :m회
      • (m, n) : m~nghl
      • () : 그룹핑

Q. 카드 번호 찾기

comment = "저의 카드 번호는 1234-2331-1123-9485와 7384 1234 5432 1222와 73841234-5432 1222 입니다."


import re

pattern = "([0-9]{4})[- ]?([0-9]{4})[- ]?([0-9]{4})[- ]?([0-9]{4})"
# print(re.findall(pattern, comment))
re.sub(pattern, "\g<1>-\g<2>-\g<3>-****", comment)

Q. 숫자로 바꾸기

s = "안녕하세요, 저의 전화번호는 영일공-48구삼삼7이사 그리고 010사팔구삼삼구삼일 입니다. 둘중에 하나로 연락하세요"

import re

p = "[0-9영공일이둘삼셋사넷오육칠팔구빵oO]{3}[- ]?[0-9영공일이둘삼셋사넷오육칠팔구빵oO]{3,4}[- ]?[0-9영공일이둘삼셋사넷오육칠팔구빵oO]{4}"

dic = {
    "영":0, "공":0, "일":1, "이":2, "둘":2, "삼":3, "셋":3, "사":4, "넷":4, "오":5, "육":6, "칠":7, "팔":8, "구":9, "빵":0, "o":0, "O":0,
}

numbers = re.findall(p, s)
result = []

for num in numbers:
    for key, value in dic.items():
        num = num.replace(key, str(value))
    num = num.replace("-", "")
    result.append(num)
result

'PYTHON > Basic' 카테고리의 다른 글

input output  (0) 2019.12.28
class  (0) 2019.12.28
operating system  (0) 2019.12.28
module  (0) 2019.12.28
function  (0) 2019.12.28