仅当子字符串单独存在时,才替换str列表中的子字符串-python

仅当子字符串单独存在时,才替换str列表中的子字符串-python,python,string,replace,Python,String,Replace,假设我有一个字符串列表: l = ['firm incorp', 'firm2 inc'] 我只想从第二个条目中删除后缀'inc',但如果我执行以下操作 l_r = [s.replace('inc', '') for s in l] 我还将从第一个条目中删除子字符串inc。处理这个问题最有效的方法是什么? 注意:我要删除的后缀原则上只在字符串的末尾。使用正则表达式删除仅在单词边界处找到的字符串: import re l_r = [re.sub(r'\binc$', '', s) for s

假设我有一个字符串列表:

l = ['firm incorp', 'firm2 inc']
我只想从第二个条目中删除后缀
'inc'
,但如果我执行以下操作

l_r = [s.replace('inc', '') for s in l]
我还将从第一个条目中删除子字符串
inc
。处理这个问题最有效的方法是什么?
注意:我要删除的后缀原则上只在字符串的末尾。

使用正则表达式删除仅在单词边界处找到的字符串:

import re

l_r = [re.sub(r'\binc$', '', s) for s in l]

\b
是与单词边界匹配的特殊字符,
$
表示字符串的结尾或字符串结尾的换行符之前。有关更多信息,请阅读。

使用正则表达式删除仅在单词边界处找到的字符串:

import re

l_r = [re.sub(r'\binc$', '', s) for s in l]

\b
是与单词边界匹配的特殊字符,
$
表示字符串的结尾或字符串结尾的换行符之前。有关更多信息,请阅读。

这里有一个不带正则表达式的解决方案:

l = ['firm incorp', 'firm2 inc']
l2 = [' '.join(j for j in i.split(' ') if j != 'inc') for i in l]

# ['firm incorp', 'firm2']

下面是一个不带正则表达式的解决方案:

l = ['firm incorp', 'firm2 inc']
l2 = [' '.join(j for j in i.split(' ') if j != 'inc') for i in l]

# ['firm incorp', 'firm2']


在罕见的情况下,您有
inc
这将失败,但我怀疑这会失败happen@jamylak好的,它将产生一个只包含空格的字符串,据我所知,这是预期的结果。您可以通过将last
\b
更改为
$
@jamylak轻松处理它,我同意,我只是不确定这是否是OP真正想要的OP说的后缀,意思是在结尾,所以我认为
$
是合适的,在罕见的情况下,你有
inc
这将失败,但我怀疑这会失败happen@jamylak它将产生一个只有空格的字符串,据我所知,是预期的结果吗?你可以通过将最后一个
\b
更改为
$
@jamylak来轻松处理它。我同意,我只是不确定这是否是OP真正想要的,最后的意思是,我认为
$
是合适的,如果一个人的名字是
inc
,他的公司叫
inc jackson&co
:P@jamylak,在这种情况下,你的答案更可取:)这有点荒谬,但我刚刚发现了一个真实的例子:
incresearch INC
,这将删除两个INC(如果我们转换成小写)我试过,否决我自己的帖子,但是-唉-这是不可能的!如果你编辑你的帖子,我可以将我的Up-vote改为down-vote,如果这能让你感觉更好的话。(如果我是你,我不会这么做)如果一个人的名字是
inc
,他的公司叫
inc-jackson&co
,该怎么办P@jamylak,在这种情况下,你的答案更可取:)这有点荒谬,但我刚刚发现了一个现实生活中的例子:
incresearch INC
,这将删除两个INC(如果我们转换为小写),我尝试过,否决我自己的帖子,但是——唉——这是不可能的!如果你编辑了你的帖子,我可以把我的上一票改为下一票,如果这能让你感觉更好的话。(如果我是你,我不会这么做)