Leetcode_30 Days of Pandas
문제 출처
https://leetcode.com/studyplan/30-days-of-pandas/
1. 문제
"Find Users With Valid E-Mails" / 유효한 이메일을 가진 사용자 찾기
Table : Users
Coulumn Name | Type |
user_id | int |
name | varchar |
varchar |
Write a solution to find the users who have valid emails.
A valid e-mail has a prefix name and a domain where:
• The prefix name is a string that may contain letters (upper or lower case), digits, underscore '_', period '.', and/or dash '-'. The prefix name must start with a letter.
•The domain is '@leetcode.com'.
Return the result table in any order.
CheckPoint
1. 문자, 숫자, 언더바, 하이픈, 마침표만 포함, 그외는 다 예외처리
2. 도메인주소는 @leetcode.com 으로, 그외는 다 예외처리
2. 문제풀이
1차시. 정답
1. 문자, 숫자, _, . , - , @leetcode.com 만 사용
- match 문법을 사용
- 문자, 숫자, _, . , - , @leetcode.com 조건 생성필요
2. 조건 생성후 users테이블에서 반환되도록
import pandas as pd
def valid_emails(users: pd.DataFrame) -> pd.DataFrame:
return users[users['mail'].str.match(r'^[a-zA-Z][a-zA-Z0-9_.-]*@leetcode\.com$')]
어려웠던 점
1. 추출 조건 구조짜는 것이 어려웠다. > ChatGPT / Solutions 채널에서 다른 사람 코드 참고
배운 점
1. 'r'^[a-zA-Z][a-zA-Z0-9_.-]*@leetcode\.com$' 코드
- r : 정규 표현식 문자열 앞에 사용되는 표시, 이는 "raw string"을 의미로 문자열 안의 백슬래시(\)가 특별한 이스케이프 시퀀스로 해석되지 않도록 한다
- ^: 문자열의 시작을 나타낸다
- [a-zA-Z]: 첫 문자가 반드시 알파벳 대문자(A-Z) 또는 소문자(a-z) 중 하나여야 함을 의미
- [a-zA-Z0-9_.-]*: 이어지는 문자들이 알파벳 대문자 또는 소문자, 숫자(0-9), 밑줄(_), 마침표(.), 또는 대시(-) 중 하나여야 함을 나타낸다. *는 이러한 문자들이 0개 이상 반복될 수 있음을 의미
- @leetcode\.com: 이메일 주소가 '@leetcode.com'으로 끝나야 함을 나타낸다. 여기서 \.는 마침표가 문자 그대로의 마침표임을 나타내기 위해 사용(정규 표현식에서 마침표는 특별한 의미를 가지기 때문에 이스케이프 처리가 필요)
- $: 문자열의 끝을 나타낸다.
2. '\.' 이스케이프 처리된 마침표는 문자 그대로의 마침표를 의미. 즉, 이메일 주소에 정확히 마침표가 있어야만 해당 위치에서 일치한다는 것을 나타낸다.
'Python > LeetCode' 카테고리의 다른 글
[LeetCode] String Methods 1527. Patients With a Condition (0) | 2024.01.03 |
---|---|
[LeetCode] String Methods 1667. Fix Names in a Table (0) | 2024.01.03 |