Python 如何匹配图案并向其添加字符

Python 如何匹配图案并向其添加字符,python,regex,Python,Regex,我有点像: GCF_002904975:2.6672e-05):2.6672e-05. 我想在下一个冒号之前的任何GCF(任何数字)条目后面添加单词“_S”。 换句话说,我希望我的文本变成: GCF_002904975_S:2.6672e-05):2.6672e-05. 我在我的文本中一直重复着这样的模式。为什么不做一个替换呢?缩短示例字符串以使其更易于阅读: "(((GCF_001297375:2.6671e-05,GCF_002904975:2.6672e-05)...".replace

我有点像:

GCF_002904975:2.6672e-05):2.6672e-05.
我想在下一个冒号之前的任何GCF(任何数字)条目后面添加单词“_S”。 换句话说,我希望我的文本变成:

GCF_002904975_S:2.6672e-05):2.6672e-05.

我在我的文本中一直重复着这样的模式。为什么不做一个替换呢?缩短示例字符串以使其更易于阅读:

"(((GCF_001297375:2.6671e-05,GCF_002904975:2.6672e-05)...".replace(":","_S:")

可以将正则表达式与函数替换一起使用。下面的解决方案取决于数字始终为9位,但可以修改以适用于其他情况

test_str = '(((GCF_001297375:2.6671e-05,GCF_002904975:2.6672e-05)0.924:0.060046136,GCF_000144955:0.036474926,((GCF_001681075:0.017937143,...'
new_str = re.sub(r"GCF_\d{9}", lambda x: x.group(0) + "_S", test_str)

print(new_str)
#(((GCF_001297375_S:2.6671e-05,GCF_002904975_S:2.6672e-05)0.924:0.060046136,GCF_000144955_S:0.036474926,((GCF_001681075_S:0.017937143,...

这可以通过
re.sub
功能轻松完成。工作示例如下所示:

import re

inp_string='(((GCF_001297375:2.6671e-05,GCF_002904975:2.6672e-05)0.924:0.060046136,(GCF_000144955:0.036474926,((GCF_001681075:0.017937143,...'

if __name__ == "__main__":
    outp_string = re.sub(r'GCF_(?P<gfc_number>\d+)\:', r'GCF_\g<gfc_number>_S:', inp_string)
    print(outp_string)
重新导入
inp_字符串='((GCF_001297375:2.6671e-05,GCF_002904975:2.6672e-05)0.924:0.060046136,(GCF_000144955:0.036474926,((GCF_001681075:0.017937143,…)
如果名称=“\uuuuu main\uuuuuuuu”:
输出字符串=re.sub(r'GCF_(?P\d+)\:',r'GCF_g\u S:',输入字符串)
打印(输出字符串)
这段代码给出了以下结果,这正是您所需要的:

((GCF_001297375_S:2.6671e-05,GCF_002904975_S:2.6672e-05)0.924:0.060046136,(GCF_000144955_S:0.036474926,((GCF_001681075_S:0.017937143,…)

有关更多信息,请查看文档:

请花点时间阅读帮助中心中的。堆栈溢出上的格式与其他网站不同。您的文章越好看,其他人就越容易阅读和理解。@Mariano,有没有办法提供一个简短的示例;鉴于篇幅太长,很难理解