【问题标题】:Create a list everytime I encounter a certain word in a str每次我在 str 中遇到某个单词时创建一个列表
【发布时间】:2019-04-21 05:51:17
【问题描述】:

我的问题是我想写一个这样的代码:

    input => str_of_words = '<post>30blueyellow<post>2skyearth<post>5summerwinter'
    output => post30 = ["blue","yellow"]
              post2 = ["sky","earth"]
              post5 = ["summer", "winter"]

起初我以为我可以做类似的事情

     if "<post>" in str_of_words:
         occurrence = str_of_words.count("<post>")
         #and from there I had no idea how to continue coding it

所以我觉得我可以问是否有人知道一些技巧来做到这一点

【问题讨论】:

  • Python 中提供了很多字符串技巧,但是通过分隔符 &lt;post&gt;(我们使用 str.split("&lt;post&gt;") 来分割字符串)和试图找出两个词是什么之间存在很大差异在 30blueyellow 中,没有可辨别的规则来分割它们。

标签: string python-3.x list spyder


【解决方案1】:

您可以使用nltk 模块:

import re
import nltk
nltk.download('words')
from nltk.corpus import words

def split(a):
    for i in range(len(a)):
        if a[:i] in words.words() and a[i:] in words.words():
            return [a[:i],a[i:]]


str_of_words = '<post>30blueyellow<post>2skyearth<post>5summerwinter'

post = {i:split(j) for i,j in dict(re.findall(r'post>(\d+)(\w+)',str_of_words)).items()}

post['30']
 ['blue', 'yellow']

post['5']
 ['summer', 'winter']

post['2']
 ['sky', 'earth']

【讨论】:

    【解决方案2】:

    这可能会让你开始:

    import re
    
    str_of_words = '<post>30blueyellow<post>2skyearth<post>5summerwinter'
    
    posts = {}
    lst = str_of_words.split('<post>')
    for item in lst:
        match = re.match('(\d+)(\D+)', item)
        if not match:
            continue
        posts[int(match.group(1))] = match.group(2)
    
    print(posts)
    

    打印出来:

    {30: 'blueyellow', 2: 'skyearth', 5: 'summerwinter'}
    

    所以posts[30] = 'blueyellow'

    re module 在区分数字 (\d) 和非数字 (\D) 时非常有用。

    我不知道您希望根据什么规则来拆分单词。你有可能出现的单词列表吗?

    【讨论】:

    • 考虑“+any_number”之后的每个单词都应该放在它出现的最后一篇文章中。您向我展示的方式实际上非常好,甚至我的教授都告诉我使用 re 但我想在没有 re 的情况下这样做:/ Ty 作为答案,我想我必须学习那个库
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 2013-08-22
    • 2018-05-16
    相关资源
    最近更新 更多