【问题标题】:How to replace specific sub-string of a string using python while we have multiple sub-string?当我们有多个子字符串时,如何使用python替换字符串的特定子字符串?
【发布时间】:2019-08-30 21:27:10
【问题描述】:

我有一句话假设

s = 'alpha-catenin inhibits beta-catenin signaling by preventing formation of a beta-catenin*T-cell factor*DNA complex.'

现在,我想用 'PROTEIN' 替换第一个出现的 'beta-catenin' 而第二个出现的 beta-catenin 不应该被替换,即所需的输出应该是

rep_s = s = 'alpha-catenin inhibits PROTEIN signaling by preventing formation of a beta-catenin*T-cell factor*DNA complex.'

另外,我有第一个出现的 beta-catenin 的索引值和长度,即 'offset' = 23'length' = 12

我试过一个代码

s1.replace(s1[23:(23+12)], 'PROTEIN')

但是输出来了

'alpha-catenin inhibits PROTEIN signaling by preventing formation of a PROTEIN*T-cell factor*DNA complex.'

它只是替换了所有两个不可取的 beta-catenin。请帮助我获得我想要的输出。

【问题讨论】:

标签: python string replace substring


【解决方案1】:

如果要替换第一个,可以使用replace() 中的count 可选参数。如果您想在 n != 1 时替换第 n 次出现,这将不起作用

s.replace('beta-catenin', 'PROTEIN', 1)

【讨论】:

    【解决方案2】:

    replace 替换给定子字符串的每次出现。它不知道你已经通过了一片;它只是接收字符串'beta-catenin' 作为查找和替换的内容。

    但是由于您已经找到了要剪切的索引,因此您可以只使用切片来执行此操作:

    result = s1[:23] + 'PROTEIN' + s1[23+12:]
    

    【讨论】:

      【解决方案3】:

      您可以通过以下两种方式存档

      方式1:使用字符串替换功能替换第一次出现

      s = 'alpha-catenin inhibits beta-catenin signaling by preventing formation of a beta-catenin*T-cell factor*DNA complex.'
      s.replace("beta-catenin", "PROTEIN", 1)
      print(s)
      

      输出:

      alpha-catenin inhibits PROTEIN signaling by preventing formation of a beta-catenin*T-cell factor*DNA complex.
      

      方式2:使用python的正则表达式

      import re
      s = 'alpha-catenin inhibits beta-catenin signaling by preventing formation of a beta-catenin*T-cell factor*DNA complex.'
      s = re.sub("beta-catenin", "PROTEIN", s, 1)
      print(s)
      

      输出:

      alpha-catenin inhibits PROTEIN signaling by preventing formation of a beta-catenin*T-cell factor*DNA complex.
      

      【讨论】:

        【解决方案4】:

        我会通过以下方式解决它:

            line = 'alpha-catenin inhibits beta-catenin signaling by preventing             
            formation of a beta-catenin*T-cell factor*DNA complex.'
        
            new = (line.split('beta-catenin'))
            print(('PROTEIN').join(new))
        

        这也确保了每次出现都会被替换。 如果您需要任何进一步的帮助,请告诉我。

        【讨论】:

        • 只有第一个匹配项被替换。我想你误解了这个问题
        • 好的,那么如果只需要更改第一个匹配项,那么最好使用替换:str.replace(old, new,occurrence number)
        猜你喜欢
        • 2021-06-13
        • 2011-09-01
        • 2014-06-09
        • 1970-01-01
        • 2017-12-06
        • 2016-09-10
        • 2015-11-09
        • 2020-10-04
        相关资源
        最近更新 更多