Python 将列表中除元素外的所有文本小写

Python 将列表中除元素外的所有文本小写,python,regex,Python,Regex,我有这样一段文字:s=“我从2014年开始注册一门课程,是哲学硕士。我非常喜欢它。” 还有一个单词列表list=[“MPhil”,“MuCH”] 我正在寻找一个正则表达式代码,它能够将除列表元素之外的所有文本小写 我找到了这个正则表达式解决方案,它可以将所有字符(除了'之间的单词)小写: s=re.sub(r”\b(?只需查看您匹配的单词是否在要保持原样的单词集中: import re words_to_keep = {"MPhil", "MuCH"}

我有这样一段文字:
s=“我从2014年开始注册一门课程,是哲学硕士。我非常喜欢它。”

还有一个单词列表
list=[“MPhil”,“MuCH”]

我正在寻找一个正则表达式代码,它能够将除列表元素之外的所有文本小写

我找到了这个正则表达式解决方案,它可以将所有字符(除了
'
之间的单词)小写:


s=re.sub(r”\b(?只需查看您匹配的单词是否在要保持原样的单词集中:

import re

words_to_keep = {"MPhil", "MuCH"}


def replace_if_not_in_keeplist(match):
    word = match.group()
    if word in words_to_keep:
        return word
    return word.lower()


s = "I am Enrolled in a course, MPhil since 2014. I LOVE this SO MuCH."
s2 = re.sub(r"\w+", replace_if_not_in_keeplist, s)

print(s)
print(s2)
输出

I am Enrolled in a course, MPhil since 2014. I LOVE this SO MuCH.
i am enrolled in a course, MPhil since 2014. i love this so MuCH.

“我试图拆分文本并检查它是否来自列表,但我发现它并不实用。”-为什么不呢?这似乎是我最直接的解决方案。你需要检查
吗?试试
re.sub(fr”\b(?)(?:{'|'。join(word|list)})\b)\w+\b),lambda m:m.group().lower(),s)
@Tomalak,因为我有一个很长的文本,而且当我拆分时,我会得到一些单词,其中有一些点和comma@WiktorStribiżew no the'只是我正在寻找的一种解决方案,我想降低所有文本,除了带有正则表达式的列表中的某些特定单词…所以?使用
.upper()时,逗号和点不会改变
.lower()
。正在工作,非常感谢