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

string = "abaabaaabaaaabaaabaaaaaabaababaaabaaaabaaaaaabaaaaabaaabaabaababaaabaaaabaaaabaabaaab"

我想用2个不同的字符替换a,所以我想用"c"(a = c)和双"aa"将用"d""aa = d",替换标准是如果"a"的奇数,那么首先用单个"a"将用"c"替换,然后每2个"a"用"d",例如"ab = cb","aab = db","aaab = cdb"(第一个a = c,第二个a + d)aaaab = ddb. 更换后,

"cbdbcdbddbcdbdddbdbcbcdbddbdddbcddbcdbdbdbcbcdbddbddbdbcdb"

有人可以指导我如何编写代码,我可以使用"if else"或regex

推荐答案

下面是一个基于正则表达式的解决方案,避免了2次反转:

import re
string = "abaabaaabaaaabaaabaaaaaabaababaaabaaaabaaaaaabaaaaabaaabaabaababaaabaaaabaaaabaabaaab"

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

Output:

cbdbcdbddbcdbdddbdbcbcdbddbdddbcddbcdbdbdbcbcdbddbddbdbcdb

RegEx Demo

RegEx Details:

  • (?<!a):断言前一个字符不是a
  • a章:第a
  • (?=(?:aa)*(?!a)):断言前面有0个或多个双a字符,后面没有其他a

Python相关问答推荐

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

Matlab中是否有Python的f-字符串等效物

对某些列的总数进行民意调查,但不单独列出每列

删除最后一个pip安装的包

更改键盘按钮进入'

Pandas—合并数据帧,在公共列上保留非空值,在另一列上保留平均值

Streamlit应用程序中的Plotly条形图中未正确显示Y轴刻度

如何调整QscrollArea以正确显示内部正在变化的Qgridlayout?

部分视图的DataFrame

无法在Docker内部运行Python的Matlab SDK模块,但本地没有问题

在Python中使用if else或使用regex将二进制数据如111转换为001""

使用BeautifulSoup抓取所有链接

Python—转换日期:价目表到新行

python—telegraph—bot send_voice发送空文件

为什么调用函数的值和次数不同,递归在代码中是如何工作的?

在二维NumPy数组中,如何 Select 内部数组的第一个和第二个元素?这可以通过索引来实现吗?

numpy数组和数组标量之间的不同行为

使用xlsxWriter在EXCEL中为数据帧的各行上色

多索引数据帧到标准索引DF

#将多条一维曲线计算成其二维数组(图像)表示