介绍
在这个项目中,你将学习如何使用 Python 从文本中提取用户名。这在社交媒体和即时通讯应用中是一项常见任务,其中 @ 字符常被用于提及某人。
👀 预览
## 示例 1
>>> from parse_username import after_at
>>> text = "@LabEx @labex I won in the @ competition"
>>> print(after_at(text))
['LabEx', 'labex']
## 示例 2
>>> text = "@LabEx@labex I won in the @ competition"
>>> print(after_at(text))
['LabEx', 'labex']
## 示例 3
>>> text = "@labex @LabEx I won in the @LabEx competition"
>>> print(after_at(text))
['LabEx', 'labex']
## 示例 4
>>> text = "@!LabEx @labex I won in the competition"
>>> print(after_at(text))
['labex']
## 示例 5
>>> text = "I won in the competition@"
>>> print(after_at(text))
[]
## 示例 6
>>> text = "LabEx@!"
>>> print(after_at(text))
[]
## 示例 7
>>> text = "@!@LabEx @labex I won in the @LabEx competition @experiment"
>>> print(after_at(text))
['LabEx', 'experiment', 'labex']
🎯 任务
在这个项目中,你将学习:
- 如何实现
after_at函数以从给定文本中提取用户名 - 如何处理边界情况并优化函数性能
- 如何使用各种输入场景测试该函数
🏆 成果
完成这个项目后,你将能够:
- 理解如何使用 Python 从文本中解析和提取相关信息
- 开发一个强大且高效的函数来从文本中提取用户名
- 运用你的解决问题的技能来增强函数的功能
- 全面测试你的代码以确保它按预期工作
实现 after_at 函数
在这一步中,你将实现 after_at 函数,以便从给定文本中提取用户名。
在代码编辑器中打开
parse_username.py文件。找到
after_at函数定义。该函数应以字符串
text作为输入,text可能为空。在函数内部,初始化一个名为
usernames的空列表,用于存储提取的用户名。使用
find()方法在text中找到第一个出现的@字符的索引,并将其存储在at_index变量中。当
at_index不等于-1时(即找到@字符):- 初始化一个名为
username的空字符串。 - 从
@字符之后的索引开始遍历text字符串中的字符。 - 对于每个字符,使用
isalnum()和isalpha()方法检查它是否是字母数字或下划线。 - 如果字符有效,则将其追加到
username字符串中。 - 如果字符无效,则跳出循环。
- 如果
username不为空,则将其追加到usernames列表中。 - 从先前
@字符之后的索引开始,在text字符串中找到下一个出现的@字符。
- 初始化一个名为
循环结束后,使用
set()函数从usernames列表中删除任何重复的用户名。使用带有自定义键函数的
sorted()函数,根据每个用户名的出现次数对usernames列表进行降序排序。返回排序后的
usernames列表。
你完成的 after_at 函数应如下所示:
def after_at(text):
usernames = []
at_index = text.find("@") ## 找到第一个出现的 "@" 的索引
while at_index!= -1: ## 继续循环,直到找不到更多的 "@" 符号
username = ""
for char in text[
at_index + 1 :
]: ## 遍历 "@" 符号之后的字符
if (
char.isalnum() or char == "_" or char.isalpha()
): ## 检查字符是否是字母数字或下划线
username += char ## 将字符添加到用户名
else:
break ## 如果字符不是字母数字或下划线,则停止将字符添加到用户名
if username:
usernames.append(username) ## 将提取的用户名添加到列表
at_index = text.find(
"@", at_index + 1
) ## 从下一个索引开始找到下一个 "@" 符号
## 删除重复项并按出现次数降序排序
usernames = sorted(
list(set(usernames)), key=lambda x: usernames.count(x), reverse=True
)
return usernames
测试 after_at 函数
在这一步中,你将使用提供的示例来测试 after_at 函数。
- 在代码编辑器中打开
parse_username.py文件。 - 找到文件底部的
if __name__ == "__main__":代码块。 - 在该代码块内,添加以下代码来测试
after_at函数:
## 示例 1
print(after_at("@LabEx @labex I won in the @ competition"))
## 示例 2
print(after_at("@LabEx@labex I won in the @ competition"))
## 示例 3
print(after_at("@labex @LabEx I won in the @LabEx competition"))
## 示例 4
print(after_at("@!LabEx @labex I won in the competition"))
## 示例 5
print(after_at("I won in the competition@"))
## 示例 6
print(after_at("LabEx@!"))
## 示例 7
print(after_at("@!@LabEx @labex I won in the @LabEx competition @experiment"))
- 保存
parse_username.py文件。 - 在终端或命令提示符中使用以下命令运行
parse_username.py文件:
python parse_username.py
- 验证输出是否与挑战中提供的预期结果匹配。
['LabEx', 'labex']
['LabEx', 'labex']
['LabEx', 'labex']
['labex']
[]
[]
['LabEx', 'experiment', 'labex']
总结
恭喜你!你已经完成了这个项目。你可以在 LabEx 中练习更多实验来提升你的技能。



