【问题标题】:Slicing a str from a str and adding to a list [Python]从字符串中分割字符串并添加到列表 [Python]
【发布时间】:2018-11-27 05:26:35
【问题描述】:

所以我有:

text = 'Hi my name is !bob i like to !eat'  

我想创建一个包含感叹号后的单词的列表。所以我想要一个创建如下结果的函数:

>>> my_function(text)  
['bob', 'eat']

目前我能想到的只有:

>>> test_string = text['!':' ']  

但我不能使用字符串代替索引。有什么建议?

注意:我希望它们都是小写的,包括重复项。

【问题讨论】:

    标签: python string list indexof


    【解决方案1】:

    我可能会使用正则表达式:

    import re
    text = 'Hi my name is !bob i like to !eat'
    test_string = re.findall(r'!(\w+)', text)
    print(test_string)
    

    结果:

    $ python x.py 
    ['bob', 'eat']
    

    【讨论】:

    • 我正在尝试使用不同的方法,如果有的话。不过感谢您的意见!
    • @Emma Pascoe 这很容易成为这里最有原则和最优雅的答案。如果您不想直接使用正则表达式,那么在您的帖子中明确提及这一点会很有帮助 - 特别是对于非常适合正则表达式的问题。 (事实上​​,可以说这个问题的任何解决方案都将涉及某种抽象级别的正则表达式或其他。)考虑包括对您的用例和可能出现在您的数据中的任何边缘情况的更详细的解释,以获得响应符合您的具体要求。
    【解决方案2】:

    您可以在!split,然后在' ' 上再次split。从第二个拆分中的每个段中获取第一个条目。

    [segment.split()[0] for segment in text.split("!")[1:]]
    # ['bob', 'eat']
    

    【讨论】:

      【解决方案3】:

      我能想到的最简单的解决方案 [可能看起来不像 pythonic ;)] 是:

      words = [x[1:] for x in text.split(" ") if x[0]=='!']
      
      print(words)
      

      输出:

      ['bob', 'eat']
      

      【讨论】:

      • 啊,我知道这是一个非常聪明的主意。但是,如果说中间或末尾有一个我不想包含的奇怪标点符号,我将如何修改它? (即说原始字符串包含 'bob%eats' 并且被提取但我只想要 'bob'?或 'bob%&' 而我只想要 'bob'?)
      • 嗯,目前我想不出更简单的解决方案。但让我们试一试。使用上面编写的代码,您可以提取单词。如果您只需要实际单词而不需要其他字符(如 % 或 &),则可以将这些单词拆分为字符数组。然后使用.isalpha() 方法可以删除不必要的字符。在此之后,将只剩下字母,您可以再次join 来制作真正的单词。
      【解决方案4】:

      如果您确定要查找的符号总是直接位于感兴趣的单词之前,您可以检查该符号是否在单词列表中。

      text = 'Hi my name is !bob i like to !eat'  
      symb = '!'
      
      def my_function(some_text): 
          return [i.replace(symb,'').lower() for i in text.split() if symb in i]
      
      my_function(text)
      >>['bob', 'eat']
      

      如果您不希望结果中出现该符号,只需将其替换为 ''

      【讨论】:

        猜你喜欢
        • 2023-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-15
        • 2017-03-25
        • 1970-01-01
        相关资源
        最近更新 更多