comments | difficulty | edit_url | tags | |
---|---|---|---|---|
true |
简单 |
|
表:Users
+-----------------+---------+ | Column Name | Type | +-----------------+---------+ | user_id | int | | email | varchar | +-----------------+---------+ (user_id) 是这张表的唯一主键。 每一行包含用户的唯一 ID 和邮箱地址。
编写一个解决方案来查找所有 合法邮箱地址。一个合法的邮箱地址符合下述条件:
- 只包含一个
@
符号。 - 以
.com
结尾。 @
符号前面的部分只包含 字母数字 字符和 下划线。@
符号后面与.com
前面的部分 包含 只有字母 的域名。
返回结果表以 user_id
升序 排序。
示例:
输入:
Users 表:
+---------+---------------------+ | user_id | email | +---------+---------------------+ | 1 | [email protected] | | 2 | bob_at_example.com | | 3 | [email protected] | | 4 | [email protected] | | 5 | eve@invalid | +---------+---------------------+
输出:
+---------+-------------------+ | user_id | email | +---------+-------------------+ | 1 | [email protected] | | 4 | [email protected] | +---------+-------------------+
解释:
- [email protected] 是合法的因为它包含一个
@
,alice 是只有字母数字的,并且 example.com 以字母开始并以 .com 结束。 - bob_at_example.com 是不合法的因为它包含下划线但没有
@
。 - [email protected] 是不合法的因为域名没有以
.com
结尾。 - [email protected] 是合法的因为它满足所有条件。
- eve@invalid 是不合法的因为域名没有以
.com
结尾。
结果表以 user_id 升序排序。
我们可以使用正则表达式,通过 REGEXP
来匹配符合条件的邮箱地址。
# Write your MySQL query statement below
SELECT user_id, email
FROM Users
WHERE email REGEXP '^[A-Za-z0-9_]+@[A-Za-z][A-Za-z0-9]*\\.com$'
ORDER BY 1;
import pandas as pd
def find_valid_emails(users: pd.DataFrame) -> pd.DataFrame:
email_pattern = r"^[A-Za-z0-9_]+@[A-Za-z][A-Za-z0-9]*\.com$"
valid_emails = users[users["email"].str.match(email_pattern)]
valid_emails = valid_emails.sort_values(by="user_id")
return valid_emails