Python: Как найти букву в списке слов предложения и вернуть эти слова в исходном регистре (верхний / нижний) - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь создать функцию 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"))

Вывод:

['she', 'sells', 'seashells', 'seashore']

но я хочу, чтобы «она» имела заглавную букву «S», как это показано в оригинале. Как мне это сделать? Благодаря.

Ответы [ 7 ]

1 голос
/ 29 апреля 2020

Если вы переведете ваш .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()]
1 голос
/ 29 апреля 2020

Ваш не работает, потому что вы делаете слово строчными перед проверкой. Сделайте это во время проверки, чтобы увидеть, если это в слове, так:

def word_with(sent, letter):
    x = [word for word in sent.split() if letter in word.lower()]
    return x
0 голосов
/ 29 апреля 2020

Это вернет вам оригинальное слово из буквы, которая соответствует символу

def word_with(word, char):
    return [x for x in word.split() if char.lower() in x.lower()]
0 голосов
/ 29 апреля 2020

мы можем сделать это с помощью регулярного выражения: пожалуйста, проверьте, получили ли вы желаемый результат с этим кодом

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 голосов
/ 29 апреля 2020

Я бы попробовал разделить текст, прежде чем переходить к строчным буквам и возвращать эти слова на основе индекса, который вы получите из списка.

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 голосов
/ 29 апреля 2020

Не выполняйте наложение строки и используйте регулярное выражение в своем генераторе вместо ключевого слова in:

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

.

0 голосов
/ 29 апреля 2020

используйте это:

[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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...