【问题标题】:How can I extract hashtags from string?如何从字符串中提取主题标签?
【发布时间】:2021-07-30 03:20:42
【问题描述】:

我需要从接收字符串的函数中提取“#”。 这是我所做的:

def hashtag(str):
lst = []
for i in str.split():
    if i[0] == "#":
        lst.append(i[1:])
return lst

我的代码确实有效,但它会拆分单词。因此,对于示例字符串:"Python is #great #Computer#Science",它将返回列表:['great', 'Computer#Science'] 而不是 ['great', 'Computer', 'Science']

请不要使用 RegEx。

【问题讨论】:

  • 您是否要获取以# 符号开头的单词?
  • 您是否尝试过使用split('#')

标签: python hashtag


【解决方案1】:

您可以先尝试找到# 出现的第一个索引,然后在# 上拆分切片

text = 'Python is #great #Computer#Science'
text[text.find('#')+1:].split('#')
Out[214]: ['great ', 'Computer', 'Science']

您甚至可以最后使用strip 来删除不必要的空白。

[tag.strip() for tag in text[text.find('#')+1:].split('#')]
Out[215]: ['great', 'Computer', 'Science']

【讨论】:

    【解决方案2】:

    拆分成单词,然后过滤出以 octothorpe (hash) 开头的单词。

    [word for word in str.replace("#", " #").split()
        if word.startswith('#')
    ]
    

    步骤是

    • 在每个哈希前面插入一个空格,以确保我们将它们分开
    • 在空格处分割字符串
    • 保留以哈希开头的单词。

    结果:

    ['#great', '#Computer', '#Science']
    

    【讨论】:

      【解决方案3】:
      1. #分割
      2. 获取除第一个之外的所有令牌
      3. 带状空间
      s = "Python is #great #Computer#Science"
      out = [w.split()[0] for w in s.split('#')[1:]]
      out
      ['great', 'Computer', 'Science']
      

      【讨论】:

      • 在某些情况下这不起作用,但它们没有在问题中暴露,所以我不确定这是一个问题(例如"Python is #great but needs some #time to be mastered #Computer#Science")。除此之外,绝对是解决暴露问题的直接方法。
      • 你是对的。这可以通过[w.split()[0] for w in s.split('#')[1:]] 轻松概括
      【解决方案4】:

      当您使用默认分隔符(空格)拆分字符串时,您会得到以下结果:

      ['Python', 'is', '#great', '#Computer#Science']
      

      您可以在拆分之前进行替换(在主题标签前添加一个空格)

      def hashtag(str):
          lst = []
          str = str.replace('#', ' #')
          for i in str.split():
              if i[0] == "#":
                  lst.append(i[1:])
          return lst
      

      【讨论】:

        猜你喜欢
        • 2023-01-16
        • 2012-06-15
        • 2021-12-25
        • 2017-08-09
        • 2021-06-20
        • 2011-01-05
        • 1970-01-01
        • 2018-10-07
        • 1970-01-01
        相关资源
        最近更新 更多