Python:如何在句子的单词列表中找到一个字母并以其原始大小写(大/小写)返回这些单词

问题描述 投票:0回答:6

我正在尝试创建一个Python函数,该函数接受一个句子,将其变成一个列表,并确定给定字母是否出现在该列表中的任何单词中,无论大小写如何。我想让该函数返回仅包含该字母的单词的列表,每个单词的字母均以其原始大小写。

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

我写的是:

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

当我测试:

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

输出为:

[[''s','sells','shells','seashore']

但是我希望'she'的大写字母为'S',如原文所示。我该怎么做呢?谢谢。

python list case
6个回答
1
投票

如果将.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()]

0
投票

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

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])

0
投票

使用此:

[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']

0
投票

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

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'))

0
投票

不对字符串进行任何强制转换,并在生成器中使用regex代替in关键字:

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

应该做到这一点。


0
投票

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

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)
© www.soinside.com 2019 - 2024. All rights reserved.