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

题目描述

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

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

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

要求

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

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

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

示例

  • 示例 1:

    1
    2
    text = "@实验楼 @shiyanlou 我在 @ 楼赛中中奖啦"; 
    usernames = ['实验楼', 'shiyanlou']
  • 示例 2:

    1
    2
    text = "@实验楼@shiyanlou 我在 @ 楼赛中中奖啦"; 
    usernames = ['实验楼', 'shiyanlou']
  • 示例 3:

    1
    text = "@shiyanlou @实验楼 我在 @实验楼 楼赛中中奖啦"; usernames = ['实验楼', 'shiyanlou']
  • 示例 4:

    1
    2
    text = "@!实验楼 @shiyanlou 我在楼赛中中奖啦"; 
    usernames = ['shiyanlou']
  • 示例 5:

    1
    2
    text = "我在楼赛中中奖啦@"; 
    usernames = []

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


  • 解题思路

    很简单的字符串模拟题。

  • 题解1:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    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
文章作者: Spaceack
文章链接: http://spaceack.com/2020/09/15/2020-09-15-%E8%93%9D%E6%A1%A5%E6%A5%BC%E8%B5%9B%E7%AC%AC23%E6%9C%9F-%E8%A7%A3%E6%9E%90%E7%94%A8%E6%88%B7%E5%90%8D%E5%AD%97%E7%AC%A6%E4%B8%B2/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 丸子家的小云吞
支付宝打赏
微信打赏