我正在尝试使用python的regex功能在某些文本中重新标记一些标识符。
这是文本的一个例子。我实际上是在按数字顺序给所有的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'元素是相同的。因此,这对我来说是多余的信息,需要我删除。
My Code:
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)
然而,这并没有给我想要的输出。有人知道怎么做我想要的吗?由于
可能解:
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 strg