如何在python中使用regex替换句子列表中的多个子字符串?



我有一个句子列表,如下:

sentences = ["I am learning to code", "coding seems to be intresting in python", "how to code in python", "practicing how to code is the key"]

现在我希望用单词字典及其替代品替换这个句子列表中的几个子字符串。

word_list = {'intresting': 'interesting', 'how to code': 'learning how to code', 'am learning':'love learning', 'in python': 'using python'}

我尝试了以下代码:

replaced_sentences = [' '.join([word_list.get(w, w) for w in sentence.split()])
for sentence in sentences]

但是只有一个单词字符串被替换,而不是包含多个单词的键。这是因为我使用的是一个词一个词地对句子进行标记的句子,而忽略了替换大于一个词的子字符串。

我如何使用正则表达式或任何其他建议来替换精确匹配的子字符串?

预期输出:

sentences = ["I love learning to code", "coding seems to be interesting using python", "learning how to code using python", "practicing learning how to code is the key"]

提前感谢。

如果将其分解为一个函数,替换单个句子中的所有单词,可能更容易阅读。然后你可以把它应用到列表中的所有句子。这里我们用'|'隐藏字典的所有键来创建一个正则表达式。然后使用re.sub获取与键相关的发现值,并将其作为替换返回。

import re
def replace_words(s, word_lookup):
rx = '|'.join(word_lookup.keys())
return re.sub(rx, lambda match: word_lookup[match.group(0)], s)
[replace_words(s, word_list) for s in sentences]

这将导致:

['I love learning to code',
'coding seems to be interesting using python',
'learning how to code using python',
'practicing learning how to code is the key']

您可以通过在函数中只使用一次正则表达式而不是每次都使用正则表达式来进行一些优化。这将允许您执行如下操作:

import re
rx = re.compile('|'.join(word_list.keys()))
[rx.sub(lambda match: word_list[match.group(0)], s) for s in sentences]

相关内容

  • 没有找到相关文章

最新更新