Python 中字符串的条件替换

问题描述 投票:0回答:2

我想执行字符串的条件替换。如果我的

string = "abaabaaabaaaabaaabaaaaaabaababaaabaaaabaaaaaabaaaaabaaabaabaababaaabaaaabaaaabaabaaab"

并且我想用2个不同的字符替换a,所以我想将单个“a”更改为“c”(a = c),双“aa”将更改为“d”“aa = d”,替换标准是如果“a”为奇数,则首先用单个“a”替换为“c”,然后每两个“a”替换为“d”,例如“ab = cb”,“aab = db”,“aaab = cdb” “(第一个 a = c,接下来 2 个 aa 和 d)aaaab = ddb。 更换后我的字符串将是

"cbdbcdbddbcdbdddbdbcbcdbddbdddbcddbcdbdbdbcbcdbddbddbdbcdb"

有人可以指导我如何编写可以使用“if else”或正则表达式的代码

python regex string if-statement replace
2个回答
1
投票

您可以使用 string.replace() 巧妙地完成此操作。

  1. 反转字符串
  2. 将所有“aa”替换为“d”。这通常会产生一个问题,因为替换发生在“aa”的每个第一个实例中,因此“aaa”将变成“da”而不是我们想要的“ad”。然而,我们颠倒了字符串。
  3. 再次反转字符串以将其放回原来的顺序
  4. 将所有“a”替换为“c”。由于我们将所有 'aa' 替换为 'd',因此只剩下单个 'a'。

因此,代码为:

my_string = my_string[::-1].replace('aa', 'd')[::-1].replace('a', 'c')


0
投票

这是一个基于正则表达式的解决方案,可以避免两次反转:

import re
string = "abaabaaabaaaabaaabaaaaaabaababaaabaaaabaaaaaabaaaaabaaabaabaababaaabaaaabaaaabaabaaab"

print (re.sub(r'(?<!a)a(?=(?:aa)*(?!a))', 'c', string).replace('aa', 'd'))

输出:

cbdbcdbddbcdbdddbdbcbcdbddbdddbcddbcdbdbdbcbcdbddbddbdbcdb

正则表达式演示

正则表达式详细信息:

  • (?<!a)
    :断言前一个字符不是
    a
  • a
    :匹配单个
    a
  • (?=(?:aa)*(?!a))
    :断言前面有 0 个或多个双
    a
    字符,且后面没有另一个
    a
© www.soinside.com 2019 - 2024. All rights reserved.