2016-03-11 47 views
-1

所以我有一个字符串,它是这样的:如何在Python中替换自包含的字符串?

C(=O)(CNCC(=O)O)O 

我想捕捉的字符串C(= O)(任何)O /或作为事实上,C(O)(东西)= O /与例如字母A代替它 - 使代码的输出应该是其中之一(并没有真正物质):

A(CNCA) 

A(CNCA)A 

到目前为止,我已经能够计算它的所有出现(但是过了好一会儿也行)与以下正则表达式:

len(re.findall(r'(?=C\(((O|=O))\)(\(.*\))?(=O|O)($|\)))', string)) 

然而,当我打印由re.findall创建的列表,它只有一些看似不一致的成员,所以我不能遍历它来代替。 re.sub也没有工作,我认为积极的向前看起来很糟糕。另外,因为匹配像(串)g,捕获组似乎很难使用。

我该如何解决这样的问题?

+2

你需要一个能算括号的事情。正则表达式在这里可能不是正确的选择。类似的原因,为什么你不能用正则表达式解析通用SGML。 –

+2

“,并用字母A代替它” - 那为什么输出不是简单的'A'? –

+0

向我们展示替代代码 –

回答

0

此程序可能为你工作:

import re 
s = 'C(=O)(CNCC(=O)O)O' 
olds = None 
while s != olds: 
    olds = s 
    s = re.sub(r'C\(=O\)([^()]*)O', r'A\1', s) 
    s = re.sub(r'C\(=O\)(\([^()]*\))O', r'A\1', s) 
    s = re.sub(r'C\(O\)([^()]*)=O', r'A\1', s) 
    s = re.sub(r'C\(O\)(\([^()]*\))=O', r'A\1', s) 
print s 
相关问题