使用 Python 从文本中提取用户名

PythonPythonBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个项目中,你将学习如何使用 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 从文本中解析和提取相关信息
  • 开发一个强大且高效的函数来从文本中提取用户名
  • 运用你的解决问题的技能来增强函数的功能
  • 全面测试你的代码以确保它按预期工作

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python/BasicConceptsGroup -.-> python/strings("Strings") python/DataStructuresGroup -.-> python/lists("Lists") python/DataStructuresGroup -.-> python/sets("Sets") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/FileHandlingGroup -.-> python/file_operations("File Operations") subgraph Lab Skills python/strings -.-> lab-302751{{"使用 Python 从文本中提取用户名"}} python/lists -.-> lab-302751{{"使用 Python 从文本中提取用户名"}} python/sets -.-> lab-302751{{"使用 Python 从文本中提取用户名"}} python/function_definition -.-> lab-302751{{"使用 Python 从文本中提取用户名"}} python/file_operations -.-> lab-302751{{"使用 Python 从文本中提取用户名"}} end

实现 after_at 函数

在这一步中,你将实现 after_at 函数,以便从给定文本中提取用户名。

  1. 在代码编辑器中打开 parse_username.py 文件。

  2. 找到 after_at 函数定义。

  3. 该函数应以字符串 text 作为输入,text 可能为空。

  4. 在函数内部,初始化一个名为 usernames 的空列表,用于存储提取的用户名。

  5. 使用 find() 方法在 text 中找到第一个出现的 @ 字符的索引,并将其存储在 at_index 变量中。

  6. at_index 不等于 -1 时(即找到 @ 字符):

    • 初始化一个名为 username 的空字符串。
    • @ 字符之后的索引开始遍历 text 字符串中的字符。
    • 对于每个字符,使用 isalnum()isalpha() 方法检查它是否是字母数字或下划线。
    • 如果字符有效,则将其追加到 username 字符串中。
    • 如果字符无效,则跳出循环。
    • 如果 username 不为空,则将其追加到 usernames 列表中。
    • 从先前 @ 字符之后的索引开始,在 text 字符串中找到下一个出现的 @ 字符。
  7. 循环结束后,使用 set() 函数从 usernames 列表中删除任何重复的用户名。

  8. 使用带有自定义键函数的 sorted() 函数,根据每个用户名的出现次数对 usernames 列表进行降序排序。

  9. 返回排序后的 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 函数。

  1. 在代码编辑器中打开 parse_username.py 文件。
  2. 找到文件底部的 if __name__ == "__main__": 代码块。
  3. 在该代码块内,添加以下代码来测试 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"))
  1. 保存 parse_username.py 文件。
  2. 在终端或命令提示符中使用以下命令运行 parse_username.py 文件:
python parse_username.py
  1. 验证输出是否与挑战中提供的预期结果匹配。
['LabEx', 'labex']
['LabEx', 'labex']
['LabEx', 'labex']
['labex']
[]
[]
['LabEx', 'experiment', 'labex']
✨ 查看解决方案并练习

总结

恭喜你!你已经完成了这个项目。你可以在 LabEx 中练习更多实验来提升你的技能。