我正在尝试使用pythons特性在一些文本中重新命名一些标识符。
这是一个文本的例子。我基本上是想把所有的v都按数字顺序编号。
@r=v4 "v4"
A -> C : B
Cell * kcat * B * A / (km + A)
@r=v4 "v4"
C -> C+D
Cell * v2_k * C
@r=v4 "v4"
C -> : D
Cell * kcat2 * D * C / (km2 + C)
@r=v4 "v4"
C -> C+D
Cell * v2_k * C所以想要的输出是
@r=v1 "v1"
A -> C : B
Cell * kcat * B * A / (km + A)
@r=v2 "v2"
C -> C+D
Cell * v2_k * C
@r=v3 "v3"
C -> : D
Cell * kcat2 * D * C / (km2 + C)
@r=v4 "v4"
C -> C+D
Cell * v2_k * C然而,也有一个复杂的问题。如果仔细观察,您可以看到“v2”和“v4”元素是相同的。因此,对于我来说,这是多余的信息,需要删除。
我的守则:
string='''
@r=v4 "v4"
A -> C : B
Cell * kcat * B * A / (km + A)
@r=v4 "v4"
C -> C+D
Cell * v2_k * C
@r=v4 "v4"
C -> : D
Cell * kcat2 * D * C / (km2 + C)
@r=v4 "v4"
C -> C+D
Cell * v2_k * C
'''
pattern=re.compile('@r=(.*)')
for i in range(len(re.findall(pattern,string))):
print re.sub(pattern,'@r=v{} "v{}"'.format(str(i+1),str(i+1)),string)然而,这并没有给我想要的输出。有人知道怎么做我想做的事吗?谢谢
发布于 2015-10-15 16:02:09
可能的解决办法:
string='''@r=v4 "v4"
A -> C : B
Cell * kcat * B * A / (km + A)
@r=v4 "v4"
C -> C+D
Cell * v2_k * C
@r=v4 "v4"
C -> : D
Cell * kcat2 * D * C / (km2 + C)
@r=v4 "v4"
C -> C+D
Cell * v2_k * C'''
i = 0
for strg in string.splitlines():
if strg == '@r=v4 "v4"':
i += 1
print '@r=v{} "v{}"'.format(i,i)
else:
print strg输出:
@r=v1 "v1"
A -> C : B
Cell * kcat * B * A / (km + A)
@r=v2 "v2"
C -> C+D
Cell * v2_k * C
@r=v3 "v3"
C -> : D
Cell * kcat2 * D * C / (km2 + C)
@r=v4 "v4"
C -> C+D
Cell * v2_k * C您可以轻松地连接所有字符串并获得带有重新标记标识符的文本。如下所示:
new_text = ""
for strg in string.splitlines():
if strg == '@r=v4 "v4"':
i += 1
new_text += '@r=v{} "v{}"\n'.format(i,i)
else:
new_text += strg + '\n'对于一些更困难的案例:
for strg in string.splitlines():
if strg in ['@r=v4 "v4"','@r=v2 "v2"','@r=v3 "v3"'] : # any string if there aren't huge amount of cases
i += 1
print '@r=v{} "v{}"'.format(i,i)
else:
print strghttps://stackoverflow.com/questions/33152667
复制相似问题