【问题标题】:Python: How to find a letter in a sentence's list of words and return those words in their original case (upper/lower)Python:如何在句子的单词列表中找到一个字母并以原始大小写(大写/小写)返回这些单词
【发布时间】:2020-04-29 18:20:39
【问题描述】:

我正在尝试创建一个 Python 函数,该函数接受一个句子,将其转换为一个列表,并确定给定字母是否出现在该列表中的任何单词中,无论字母大小写如何。然后我希望该函数只返回包含该字母的单词列表,每个单词的字母都是原始大小写。

我已经能够返回这些单词,但现在所有字母都是小写的,即使它们最初是大写的。我如何在原始情况下返回带有字母的单词?

我写的:

def word_with(word, char):
    char_lower = char.lower()
    word_lower = word.lower()
    word_string = word_lower.split()
    word_with = [x for x in word_string if char_lower in x]
    return word_with

当我测试时:

word = "她在海边卖贝壳"
print(word_with(word, "s"))

输出是:

['她', '卖', '贝壳', '海滨']

但我希望“她”有一个大写的“S”,就像它在原版中出现的那样。我该怎么做呢?谢谢。

【问题讨论】:

    标签: python list case


    【解决方案1】:

    您的不起作用,因为您在检查之前将单词小写。在检查它是否在单词中时执行此操作,如下所示:

    def word_with(sent, letter):
        x = [word for word in sent.split() if letter in word.lower()]
        return x
    

    【讨论】:

      【解决方案2】:

      如果您将 .lower() 调用移至列表理解的条件部分,则可以返回原始单词。

      类似这样的:

          def words_with(s, char):
              char_lower = char.lower()
              # Get individual words
              words = s.split()
              # Return all words that contain char
              return [word for word in words if char_lower in word.lower()]
      

      【讨论】:

        【解决方案3】:

        我会先尝试拆分,然后再根据您从列表理解中获得的索引返回这些单词。

        def word_with(word, char):
            char_lower = char.lower()<br/>
            original_split = word.split()
            word_lower = word.lower()<br/>
            word_string = word_lower.split()<br/>
            word_with = [x for x in range(len(word_string)) if char_lower in word_string[i]]<br/>
            return([original_split[i] for i in word_with])
        

        【讨论】:

          【解决方案4】:

          使用这个:

          [x for x in word_string if char_lower in x.lower()]
          

          def word_with(word, char):
              char_lower = char.lower()
              word_string = word.split()
              word_with = [x for x in word_string if char_lower in x.lower()]
              return(word_with)
          
          
          word = "She sells seashells by the seashore"
          print(word_with(word, "s"))
          

          ['She', 'sells', 'seashells', 'seashore']
          

          【讨论】:

          • 他不想将每个匹配项都大写...他只想要原始未修改输入中表示的原始单词。
          【解决方案5】:

          我们可以使用正则表达式来做到这一点: 请检查您是否使用此代码获得了所需的输出

          import re
          def word_with(word, char):
              word_string = word.split()
              print(word_string)
              word_with = [x for x in word_string if re.search(r'^[s]',x,re.I)]
              return(word_with)
          
          word = "She sells seashells by the seashore"
          print(word_with(word,'s'))
          

          【讨论】:

          • 谢谢。我减去了“print(word_string)”行,它给了我正在寻找的输出。
          【解决方案6】:

          不要对字符串执行任何转换,并在生成器中使用正则表达式而不是 in 关键字:

          def word_with(word, char):
              return [x for x in word.split() if re.search(char, x, re.IGNORECASE)]
          

          应该做的伎俩。

          【讨论】:

          • 谢谢。我还没有使用正则表达式的经验。我把“import re”放在第一行,你的建议效果很好。
          【解决方案7】:

          这将返回与字符匹配的字母中的原始单词

          def word_with(word, char):
              return [x for x in word.split() if char.lower() in x.lower()]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-04-29
            • 2015-12-10
            • 2022-11-23
            • 2011-10-24
            • 2016-10-31
            相关资源
            最近更新 更多