728x90
문제
Table: Users
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| user_id | int |
| name | varchar |
| mail | varchar |
+---------------+---------+
user_id is the primary key (column with unique values) for this table.
This table contains information of the users signed up in a website. Some e-mails are invalid.
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.
https://leetcode.com/problems/find-users-with-valid-e-mails/description/?lang=pythondata
예시
Input:
Users table:
+---------+-----------+-------------------------+
| user_id | name | mail |
+---------+-----------+-------------------------+
| 1 | Winston | winston@leetcode.com |
| 2 | Jonathan | jonathanisgreat |
| 3 | Annabelle | bella-@leetcode.com |
| 4 | Sally | sally.come@leetcode.com |
| 5 | Marwan | quarz#2020@leetcode.com |
| 6 | David | david69@gmail.com |
| 7 | Shapiro | .shapo@leetcode.com |
+---------+-----------+-------------------------+
Output:
+---------+-----------+-------------------------+
| user_id | name | mail |
+---------+-----------+-------------------------+
| 1 | Winston | winston@leetcode.com |
| 3 | Annabelle | bella-@leetcode.com |
| 4 | Sally | sally.come@leetcode.com |
+---------+-----------+-------------------------+
Explanation:
The mail of user 2 does not have a domain.
The mail of user 5 has the # sign which is not allowed.
The mail of user 6 does not have the leetcode domain.
The mail of user 7 starts with a period.
문제 풀이
import pandas as pd
# 1. ^: 문자열의 시작
# 2. [A-Za-z]: 첫 번째 문자는 알파벳 대문자 또는 소문자
# 3. [A-Za-z0-9_\.\-]*: 첫 번째 문자 다음에는 알파벳, 숫자, 밑줄, 점, 또는 하이픈이 0개 이상 올 수 음
# 4. @: '@' 문자.
# 5. leetcode: '@' 다음에는 반드시 'leetcode'라는 문자열이 와야함
# 6. \.com: 'leetcode' 다음에는 반드시 '.com'이 와야함. 점은 이스케이프 처리되어 문자 그대로의 점을 의미
# 7. $: 문자열의 끝을 나타냄
def valid_emails(users: pd.DataFrame) -> pd.DataFrame:
return users[users['mail'].str.match(r'^[A-Za-z][A-Za-z0-9_\.\-]*@leetcode\.com$')]
파이썬을 독학하시는 분들에게 도움이 되길 바라며,
혹 더 좋은 방법이 있거나 오류가 있다면 편하게 말씀 부탁드립니다.
728x90