[Python] 데이터 ν‘œν˜„μ„ μœ„ν•œ μ •κ·œν‘œν˜„μ‹ 정리

2025. 1. 15. 13:52·🧩 Language/Python
728x90
λ°˜μ‘ν˜•

 

β€» SK μ‰΄λ”μŠ€ λ£¨ν‚€μ¦ˆ 24κΈ° (ν΄λΌμš°λ“œκΈ°λ°˜ 슀마트 μœ΅ν•©λ³΄μ•ˆ κ³Όμ •) κ΅μœ‘μ„ λ“€μœΌλ©΄μ„œ μž‘μ„±ν•œ λ‚΄μš©μž…λ‹ˆλ‹€.

 

1️⃣ μ •κ·œ ν‘œν˜„μ‹μ˜ κΈ°λ³Έ κ°œλ…

πŸ”Ήμ •κ·œ ν‘œν˜„μ‹κ³Ό μΆ•μ•½ ν‘œν˜„μ‹

  • μ •κ·œ ν‘œν˜„μ‹: νŠΉμ • νŒ¨ν„΄μ˜ λ¬Έμžμ—΄μ„ μ°Ύκ±°λ‚˜ λ³€ν™”ν•  수 μžˆλŠ” 문법
  • μΆ•μ•½ ν‘œν˜„μ‹: μ •κ·œν‘œν˜„μ‹μ„ κ°„κ²°ν•˜κ²Œ ν‘œν˜„ν•œ ν˜•νƒœ
μ •κ·œ ν‘œν˜„μ‹ 의미 μΆ•μ•½ ν‘œν˜„μ‹
[0-9] 숫자λ₯Ό 찾음 \d
[^0-9] μˆ«μžκ°€ μ•„λ‹Œ 것을 찾음 \D
[\t\n\r\f\v] 문자(ν…μŠ€νŠΈ, 특수문자, 숫자)λ₯Ό 찾음 \s
[^\t\n\r\f\v] λ¬Έμžκ°€ μ•„λ‹Œ 것을 찾음 \S
[a-z] μ†Œλ¬Έμžλ₯Ό 찾음  
[^a-z] μ†Œλ¬Έμžκ°€ μ•„λ‹Œ 것을 찾음  
[A-Z] λŒ€λ¬Έμžλ₯Ό 찾음  
[^A-Z] λŒ€λ¬Έμžκ°€ μ•„λ‹Œ 것을 찾음  
[A-Za-z0-9] 영문자, 숫자λ₯Ό 찾음 \w
[^A-Za-z0-9] 영문자, μˆ«μžκ°€ μ•„λ‹Œ 것을 찾음 \W

ν‘œ 좜처 (https://wikidocs.net/179531)


πŸ”Ήλ©”νƒ€ 문자

  • μ •κ·œ ν‘œν˜„μ‹: νŠΉμ • νŒ¨ν„΄μ˜ λ¬Έμžμ—΄μ„ μ°Ύκ±°λ‚˜ λ³€ν™”ν•  수 μžˆλŠ” 문법
νŒ¨ν„΄ μ„€λͺ… 예제
^ 이 νŒ¨ν„΄μœΌλ‘œ μ‹œμž‘ν•΄μ•Ό 함 ^abc : abc둜 μ‹œμž‘ν•΄μ•Ό 함 (abcd, abc12 λ“±)
$ 이 νŒ¨ν„΄μœΌλ‘œ μ’…λ£Œλ˜μ–΄μ•Ό 함 xyz$ : xyz둜 μ’…λ£Œλ˜μ–΄μ•Ό 함 (123xyz, strxyz λ“±)
[λ¬Έμžλ“€] λ¬Έμžλ“€ 쀑에 ν•˜λ‚˜μ΄μ–΄μ•Ό 함. κ°€λŠ₯ν•œ λ¬Έμžλ“€μ˜ 집합을 μ •μ˜ν•¨. [Pp]ython : "Python" ν˜Ήμ€ "python"
[^λ¬Έμžλ“€] [λ¬Έμžλ“€]의 λ°˜λŒ€λ‘œ ν”Όν•΄μ•Όν•  λ¬Έμžλ“€μ˜ 집합을 μ •μ˜ν•¨. [^aeiou] : μ†Œλ¬Έμž λͺ¨μŒμ΄ μ•„λ‹Œ λ¬Έμžλ“€
| 두 νŒ¨ν„΄ 쀑 ν•˜λ‚˜μ΄μ–΄μ•Ό 함 (OR κΈ°λŠ₯) a | b : a λ˜λŠ” b 이어야 함
? μ•ž νŒ¨ν„΄μ΄ μ—†κ±°λ‚˜ ν•˜λ‚˜μ΄μ–΄μ•Ό 함
(Optional νŒ¨ν„΄μ„ μ •μ˜ν•  λ•Œ μ‚¬μš©)
\d? : μˆ«μžκ°€ ν•˜λ‚˜ μžˆκ±°λ‚˜ μ—†μ–΄μ•Ό 함
+ μ•ž νŒ¨ν„΄μ΄ ν•˜λ‚˜ 이상이어야 ν•¨ \d+ : μˆ«μžκ°€ ν•˜λ‚˜ 이상이어야 함
* μ•ž νŒ¨ν„΄μ΄ 0개 이상이어야 함 \d* : μˆ«μžκ°€ μ—†κ±°λ‚˜ ν•˜λ‚˜ 이상이어야 함
νŒ¨ν„΄{n} μ•ž νŒ¨ν„΄μ΄ n번 λ°˜λ³΅ν•΄μ„œ λ‚˜νƒ€λ‚˜λŠ” 경우 \d{3} : μˆ«μžκ°€ 3개 μžˆμ–΄μ•Ό 함
νŒ¨ν„΄{n,m} μ•ž νŒ¨ν„΄μ΄ μ΅œμ†Œ n번, μ΅œλŒ€ m 번 λ°˜λ³΅ν•΄μ„œ λ‚˜νƒ€λ‚˜λŠ” 경우
(n λ˜λŠ” m 은 μƒλž΅ κ°€λŠ₯)
\d{3,5} : μˆ«μžκ°€ 3개, 4개 ν˜Ήμ€ 5개 μžˆμ–΄μ•Ό 함
\d 숫자 0 ~ 9 \d\d\d : 0 ~ 9 λ²”μœ„μ˜ μˆ«μžκ°€ 3개λ₯Ό 의미
(123, 000 λ“±)
\w 문자λ₯Ό 의미 \w\w\w : λ¬Έμžκ°€ 3개λ₯Ό 의미 (xyz, ABC λ“±)
\s ν™”μ΄νŠΈ 슀페이슀λ₯Ό μ˜λ―Έν•˜λŠ”λ°, [\t\n\r\f] 와 동일 \s\s : ν™”μ΄νŠΈ 슀페이슀 문자 2개 의미 (\r\n, \t\t λ“±)
. 뉴라인(\n) 을 μ œμ™Έν•œ λͺ¨λ“  문자λ₯Ό 의미 .{3} : 문자 3개 (F15, 0x0 λ“±)

ν‘œ 좜처 (https://wikidocs.net/179531)


2️⃣ re λͺ¨λ“ˆμ˜ μ£Όμš” ν•¨μˆ˜

πŸ”Ή1. re λͺ¨λ“ˆ

  • νŒŒμ΄μ¬μ—μ„œ μ •κ·œ ν‘œν˜„μ‹μ„ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” ``re`` λͺ¨λ“ˆμ„ μž„ν¬νŠΈ 해야함
import re

πŸ”Ή2. κΈ°λ³Έ νŒ¨ν„΄ λ§€μΉ­

  • μ •κ·œ ν‘œν˜„μ‹μ„ μ‚¬μš©ν•˜μ—¬ ν…μŠ€νŠΈμ—μ„œ νŠΉμ • νŒ¨ν„΄μ„ μ°ΎλŠ” 방법
  • ``re.compile`` ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ •κ·œν‘œν˜„μ‹μ„ 컴파일
import re

#raw string
text = "μ˜€λŠ˜μ€ 2025λ…„ 1μ›” 15μΌμž…λ‹ˆλ‹€."
pattern = re.compile(r"\d+")
matches = pattern.findall(text)
print(matches)  # ['2025', '1', '15']
  • ``r"\d+"``:
    • μ •κ·œ ν‘œν˜„μ‹μ—μ„œ ``\d``λŠ” 숫자λ₯Ό μ˜λ―Έν•˜λ©°, ``+``λŠ” ν•œ 개 μ΄μƒμ˜ μ—°μ†λœ 숫자λ₯Ό μ°ΎλŠ”λ‹€λŠ” 뜻
    • ``r``은 Raw String을 μ˜λ―Έν•˜λ©°, μ΄μŠ€μΌ€μ΄ν”„ 문자λ₯Ό ν•΄μ„ν•˜μ§€ μ•Šκ³  κ·ΈλŒ€λ‘œ 전달함
      • 즉, ``\\``λ₯Ό ν•˜λ‚˜μ˜ ``\``둜 μ²˜λ¦¬ν•˜μ§€ μ•Šμ•„λ„ 됨
  • ``pattern.findall(text)``:
    • μ£Όμ–΄μ§„ ``text``μ—μ„œ μ •κ·œ ν‘œν˜„μ‹κ³Ό μΌμΉ˜ν•˜λŠ” λͺ¨λ“  뢀뢄을 리슀트둜 λ°˜ν™˜ 
#μΌλ°˜λ¬Έμžμ—΄
pattern = re.compile("\\d+")  # 숫자λ₯Ό μ°ΎλŠ” μ •κ·œ ν‘œν˜„μ‹
text = "There are 123 apples"
matches = pattern.findall(text)
print(matches)  # ['123']
  • ``"\\d+"``:
    • 일반 λ¬Έμžμ—΄μ—μ„œλŠ” ``\``λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ 문자둜 μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ—, μ‹€μ œλ‘œ μ •κ·œ ν‘œν˜„μ‹μ˜ ``\d``λ₯Ό λ‚˜νƒ€λ‚΄λ €λ©΄ ``\\d``처럼 두 번 μž‘μ„±ν•΄μ•Ό 함
    • κ²°κ³Όμ μœΌλ‘œλŠ” `\\d+``λŠ” Raw Stringμ—μ„œμ˜ ``\d+``와 λ™μΌν•œ 의미

πŸ”Ή3. re.search() ν•¨μˆ˜

  • ``re.search() ν•¨μˆ˜λŠ” ν•΄λ‹Ή λ¬Έμžμ—΄μ—μ„œ μ •κ·œ ν‘œν˜„μ‹μ„ μ°Ύμ•„μ„œ ν•˜λ‚˜μ˜ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•¨
  • 맀치 μ‹œ, ``Match`` 객체λ₯Ό λ°˜ν™˜ν•˜κ³  λ§€μΉ˜κ°€ 없을 경우 ``None``을 λ°˜ν™˜ν•¨
text = "Contact us at support@example.com"

match = re.search(r"[\w.-]+@[\w.-]+", text)

if match:
    print(match.group())  # 'support@example.com'

πŸ”Ή4. .group() λ©”μ„œλ“œ

  • ``.group()`` λ©”μ„œλ“œλŠ” 맀치된 κ²°κ³Ό 쀑 νŠΉμ • 그룹만 좜λ ₯ν•  λ•Œ μ‚¬μš©λ¨
match = re.search(r"(\d{4})-(\d{2})-(\d{2})", "Date: 2025-01-19")

if match:
    print(match.group(1))  # '2025'
    print(match.group(2))  # '01'
    print(match.group(3))  # '19'

3️⃣ μ •κ·œν‘œν˜„μ‹μ˜ ν™œμš©: λ‚ μ§œ μΆ”μΆœκ³Ό 데이터 필터링

πŸ”Ή1. λ‚ μ§œ μΆ”μΆœ (예: datetimeκ³Ό ν•¨κ»˜ μ‚¬μš©)

  • μ •κ·œν‘œν˜„μ‹μ„ ν™œμš©ν•΄ λ‚ μ§œ 데이터λ₯Ό μΆ”μΆœν•˜κ³ , 이λ₯Ό ``datetime``으둜 λ³€ν™˜ν•΄ ν™œμš©ν•  수 있음
from datetime import datetime

text = "Today is 2025-01-15."

match = re.search(r"(\d{4})-(\d{2})-(\d{2})", text)

if match:
    date = datetime.strptime(match.group(0), "%Y-%m-%d")
    
    print(date)  # 2025-01-19 00:00:00
    
    print("Year:", match.group(1))	# '2025'
	print("Year:", match.group(2))	# '01'
	print("Year:", match.group(3))	# '15'
else:
	print("No date found in the text.")

πŸ”Ή2. 쀑볡 제거 (set() κ³Ό ν•¨κ»˜ μ‚¬μš©)

  • μ •κ·œ ν‘œν˜„μ‹μ„ ν™œμš©ν•΄ ν…μŠ€νŠΈμ—μ„œ μ€‘λ³΅λœ νŒ¨ν„΄μ„ μ œκ±°ν•˜λΌλ©΄ , ``set()`` ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ κ°„νŽΈν•¨
text = "apple, banana, apple, orange, banana"
matches = re.findall(r"\w+", text)
unique_items = set(matches)
print(unique_items)  # {'apple', 'banana', 'orange'}

 

 

 

 

 

 

728x90
λ°˜μ‘ν˜•

'🧩 Language > Python' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Python] μ›Ή μŠ€ν¬λž˜ν•‘ 기초 (BeautifulSoup4, CSS Selectors)  (0) 2025.01.16
[Python] νŒŒμ΄μ¬μ„ ν™œμš©ν•œ 이메일 μžλ™ν™” 방법  (1) 2025.01.16
[Python] 파일 및 디렉터리 μ œμ–΄  (1) 2025.01.14
[Python] μ£Όμš” 데이터 ꡬ쑰 (리슀트 / λ”•μ…”λ„ˆλ¦¬)  (0) 2025.01.14
[Python] κΈ°λ³Έ μž…μΆœλ ₯ 닀루기  (0) 2025.01.13
'🧩 Language/Python' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [Python] μ›Ή μŠ€ν¬λž˜ν•‘ 기초 (BeautifulSoup4, CSS Selectors)
  • [Python] νŒŒμ΄μ¬μ„ ν™œμš©ν•œ 이메일 μžλ™ν™” 방법
  • [Python] 파일 및 디렉터리 μ œμ–΄
  • [Python] μ£Όμš” 데이터 ꡬ쑰 (리슀트 / λ”•μ…”λ„ˆλ¦¬)
WISHee
WISHee
IT와 λ³΄μ•ˆμ— λŒ€ν•œ 곡뢀 기둝을 차곑차곑 μŒ“μ•„κ°€λŠ” 기술 λΈ”λ‘œκ·Έ πŸ›‘οΈπŸ’»
  • WISHee
    DevwithWish
    WISHee
  • 전체
    였늘
    μ–΄μ œ
    • 🌳 ROOT (128)
      • ⛓️ λ„€νŠΈμ›Œν¬ λ³΄μ•ˆ (10)
        • κΈ°λ³Έ κ°œλ… (9)
        • νŒ¨ν‚· 뢄석 (1)
        • μΉ¨μž… 탐지 및 λ°©μ§€ (0)
      • βš™οΈ μ‹œμŠ€ν…œ λ³΄μ•ˆ (0)
        • 운영체제 λ³΄μ•ˆ (0)
        • 취약점 뢄석 (0)
        • 둜그 뢄석 (0)
      • 🌐 μ›Ή λ³΄μ•ˆ (1)
        • OWASP TOP 10 (1)
        • μ›Ή μ„œλ²„ λ³΄μ•ˆ (0)
        • μ›Ή 취약점 뢄석 (0)
      • ☁️ ν΄λΌμš°λ“œ λ³΄μ•ˆ (3)
        • AWS (3)
      • πŸ” μ•”ν˜Έν™” & 인증 (3)
        • μ•”ν˜Έν™” κ°œλ… (2)
        • TLS,SSL (0)
        • 인증 & μ ‘κ·Όμ œμ–΄ (1)
      • 🚨 λ³΄μ•ˆ 싀무 (30)
        • λ³΄μ•ˆ κ΄€μ œ (14)
        • λͺ¨μ˜ ν•΄ν‚Ή (12)
        • 취약점 진단 (3)
        • λ””μ§€ν„Έν¬λ Œμ‹ (1)
      • πŸ“š ISMS & ISO27001 (9)
        • ISMS, ISMS-P 인증 (2)
      • πŸ“° λ³΄μ•ˆ λ‰΄μŠ€ & νŠΈλ Œλ“œ (1)
        • μ΅œμ‹  λ³΄μ•ˆ 이슈 (1)
        • 사이버 μœ„ν˜‘ 정보 (0)
        • λ³΄μ•ˆ 컨퍼런슀 리뷰 (0)
      • πŸ”₯ SKShieldusRookies (15)
        • Review (3)
        • PBL (0)
        • 과제 (4)
        • λͺ¨λ“ˆ ν”„λ‘œμ νŠΈ (8)
        • μ΅œμ’… ν”„λ‘œμ νŠΈ (0)
      • πŸ—‚οΈ Project (3)
        • SOAR (0)
        • BlockChain (3)
      • 🧩 Language (23)
        • Java (1)
        • Python (16)
        • Programmers (6)
      • πŸ‘₯ 버전관리 & ν˜‘μ—…λ„κ΅¬ (9)
        • Git, GitHub (4)
        • etc (5)
      • πŸ’œ 일상 (21)
        • Boot Camp (4)
        • Study (6)
        • Travel (8)
        • Study Abroad (3)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

    • GitHub
  • 곡지사항

    • λ°˜κ°‘μŠ΅λ‹ˆλ‹€!
  • 인기 κΈ€

  • νƒœκ·Έ

    flask
    skμ‰΄λ”μŠ€λ£¨ν‚€μ¦ˆ
    git
    slack
    μΉΌλ¦¬λ¦¬λˆ…μŠ€
    ν•΄μ™Έμ—¬ν–‰
    λŸ°λ˜μ—¬ν–‰
    Python
    μ½”λ”©ν…ŒμŠ€νŠΈ
    λ³΄μ•ˆμ‹€μŠ΅
    VSCode
    ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
    와이어샀크
    μœ λŸ½ν•œλ‹¬μ—¬ν–‰
    λΈ”λ‘μ²΄μΈμ‹€μŠ΅
    μœˆλ„μš°λ³΄μ•ˆ
    ν˜‘μ—…λ„κ΅¬
    파이썬
    μœ λŸ½μ—¬ν–‰
    ν•œλ‹¬μ—¬ν–‰
    λͺ½μƒλ―Έμ…Έ
    μ •λ³΄λ³΄μ•ˆ
    ν”ŒλΌμŠ€ν¬
    λͺ¨μ˜ν•΄ν‚Ή
    μ˜Ήν”Œλ’°λ₯΄
    ν”„λž‘μŠ€μ—¬ν–‰
    κΉƒν—ˆλΈŒ
    λ¦¬λˆ…μŠ€λ³΄μ•ˆ
    Github
    νŒŒλ¦¬μ—¬ν–‰
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • 160x600
    250x250
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
WISHee
[Python] 데이터 ν‘œν˜„μ„ μœ„ν•œ μ •κ·œν‘œν˜„μ‹ 정리
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”