gpt4 book ai didi

Python 正则表达式 : replace a letter if it is not a part of the word in a list

转载 作者:太空宇宙 更新时间:2023-11-04 00:16:35 25 4
gpt4 key购买 nike

假设我有一个像 [cat,hat,mat,ate] 这样的单词列表,我想删除像 这样的字符串中的所有字母 a >acatbatmatecatbtmate 如果字母 a 不在单词列表中。

在当前步骤中,我可以使用以下代码按单词列表中的单词拆分字符串:

''.join([word.replace('a','') 
if word not in ['cat','hat','mat','ate']
else word for word in re.split('(cat|hat|mat|ate)','acatbatmate') ])

我可以使用 re.sub(pattern, repl, string) 直接删除字母 a 吗?

最佳答案

你可以像这样使用 re 轻松地做到这一点:

import re
except_contexts = ['cat','hat','mat','ate']
print(re.sub(r'({})|a'.format("|".join(except_contexts)), lambda x: x.group(1) if x.group(1) else '', 'acatbatmate'))
# => catbtmate

参见 Python 2 demo .

如果您使用的是 Python 3.5+,仅使用反向引用就更容易了:

import re
except_contexts = ['cat','hat','mat','ate']
print(re.sub(r'({})|a'.format("|".join(except_contexts)), r'\1', 'acatbatmate'))

但是,如果您打算替换 a,则需要使用 lambda 表达式。

详情

r'({})|a'.format("|".join(except_contexts)) 看起来像 (cat|hat|mat|ate)|a正则表达式。它会将cathat等匹配并捕获到第1组中,如果匹配,我们需要替换为该组内容。否则,我们要么替换为空字符串,要么替换为所需的替换。

参见 regex demo .

关于Python 正则表达式 : replace a letter if it is not a part of the word in a list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50743216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com