Python:用variab替换精确匹配的子字符串

2024-09-30 18:25:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串列表,如'cdbbdbda', 'fgfghjkbd', 'cdbbd'等。我还有一个从另一个字符串列表馈送的变量。我需要的是用b替换第一个列表字符串中的一个子字符串,比如b替换为z,只有在它前面加上变量列表中的一个子字符串时,所有其他的出现都将被忽略。 我所拥有的:

a = ['cdbbdbda', 'fgfghjkbd', 'cdbbd']
c = ['d', 'f', 'l']

我的工作:

^{pr2}$

我需要的是:

'cdzbdzda'
'fgfghjkbd'
'cdzbd'

我得到的是:

'cdzzdzda'
'fgfghjkbd'
'cdzzd'

“b”的所有实例都将被替换。 我是新手,欢迎任何帮助。在Stackoverflow上寻找答案,我发现了很多基于单词边界的regex或使用re的解决方案,或者使用基于countstr.replace的解决方案,但是我不能使用它,因为字符串的长度和“b”的出现次数可能不同。在


Tags: 实例字符串答案列表解决方案stackoverflow新手pr2
3条回答

您应该简单地使用带有肯定lookbehind断言的正则表达式。在

像这样:

import re

for i in a:
  for j in c:
    i = re.sub('(?<=' + j + ')b', 'z', i)

基本情况是:

^{pr2}$

我想如果在查找和替换中包含j,你会得到你想要的。在

>>> for i in a:
...     for j in c:
...         i = re.sub(j+'b', j+'z', i)
...     print i
... 
cdzbdzda
fgfghjkbd
cdzbd
>>> 

我添加了print i,因为循环不会进行就地更改,因此如果没有该输出,就不可能看到进行了哪些替换。在

您可以使用列表理解:

import re
a = ['cdbbdbda', 'fgfghjkbd', 'cdbbd']
c = ['d', 'f', 'l']
new_a = [re.sub('|'.join('(?<={})b'.format(i) for i in c), 'z', b) for b in a]

输出:

^{pr2}$

相关问题 更多 >