前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >蓝桥楼赛第23期-解析用户名字符串

蓝桥楼赛第23期-解析用户名字符串

作者头像
Spaceack
发布2020-11-04 14:46:09
4010
发布2020-11-04 14:46:09
举报
文章被收录于专栏:编程使我快乐

题目描述

在社交和即时通讯应用中,@ 字符通常用于提醒某人。例如,你在楼赛取得了好成绩,拿了奖品,激动地发送了一条微博并 @实验楼官方微博。本次挑战中,我们希望实现一个函数,能够自动提取出任意文本内容中 @ 字符后面的用户名,这对于日常使用 Python 分析社交媒体文本内容很有帮助。

补充 after_at(text) 函数中的 TODO 部分,使其实现我们需要的功能:

  • 返回一段指定文本 text 中任意 @ 字符后续的正确用户名。
  • 正确的用户名由连续中文字符、下划线和英文字母组成,不包含标点符号、空格和其他特殊字符。

要求

题目需使用 Python 3.6 完成,不能使用标准库 和 第三方库。

函数传入 text 为字符串类型,可能为空。

函数返回列表,且应按 text 字符串中的出现的正确用户名次数降序排列,次数相等无先后顺序,且不重复。

示例

示例 1:

代码语言:javascript
复制
text = "@实验楼 @shiyanlou 我在 @ 楼赛中中奖啦"; 
usernames = ['实验楼', 'shiyanlou']

示例 2:

代码语言:javascript
复制
text = "@实验楼@shiyanlou 我在 @ 楼赛中中奖啦"; 
usernames = ['实验楼', 'shiyanlou']

示例 3:

代码语言:javascript
复制
text = "@shiyanlou @实验楼 我在 @实验楼 楼赛中中奖啦"; usernames = ['实验楼', 'shiyanlou']

示例 4:

代码语言:javascript
复制
text = "@!实验楼 @shiyanlou 我在楼赛中中奖啦"; 
usernames = ['shiyanlou']

示例 5:

代码语言:javascript
复制
text = "我在楼赛中中奖啦@"; 
usernames = []

来源:蓝桥(实验楼) 链接:https://www.lanqiao.cn/challenges/50212/


解题思路

很简单的字符串模拟题。

题解1:

代码语言:javascript
复制
def after_at(text):
"""TODO
"""
usernames = []
def is_chinese(string):
    """
    检查整个字符串是否包含中文
    :param string: 需要检查的字符串
    :return: bool
    """
    for ch in string:
        if u'\u4e00' <= ch <= u'\u9fff':
            return True
    return False

def is_char(char):
    if is_chinese(char):
        return True
    elif char in ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"):
        return True
    else:
        return False

for index, t in enumerate(text):
    if t == '@':
        # 避免越界
        if index+1 < len(text):
            if is_char(text[index + 1]):
                start = index + 1
                end = start
                # 对 @ 后的字符做判断, 截取用户名
                for x in text[start:]:
                    if is_char(x):
                        end = end + 1
                        continue
                    else:
                        if text[start: end] not in usernames:
                            usernames.append(text[start: end])
                        break
return usernames
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 要求
  • 示例
相关产品与服务
即时通信 IM
即时通信 IM(Instant Messaging)基于腾讯二十余年的 IM 技术积累,支持 Android、iOS、Mac、Windows、Web、H5、小程序平台且跨终端互通,低代码 UI 组件助您30分钟集成单聊、群聊、好友与资料、消息漫游、群组管理、会话管理、直播弹幕、内容审核和推送等能力。适用于直播互动、电商带货、客服咨询、社交沟通、企业办公、互动游戏、医疗健康等场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档