我想将/ V之后的第一个/ E更改为X,将第二个/ E更改为Y,将第三个/ E更改为文本文件中的Z.
/ V后面可能跟/ E
以外的单词/ E的数量是1到3。
例如,以下字符串
AA / V + BB / E + CC / E + DD / E
应更改如下:
AA / V + X + Y + Z
这是我的代码,结果是正确的。但我认为效率低下。
s1 = '1/VV+12/ER+123/EED+1234/EC'
s2 = 'GG/K+AA/V+BB/E+FF/E+CC/E'
for s in [s1, s2]:
morphs = s.split('+')
lst = []
l = ['X','Y','Z']
i = 0
flag = False
while i < len(morphs):
lst.append(morphs[i])
if '/V' in morphs[i]:
for j in range(1, len(morphs)-i):
if '/E' in morphs[i+j]:
lst.append(l.pop(0))
flag = True
else:
lst.append(morphs[i+j])
i = i+j
flag = False
break
if flag:
break
i+=1
print('+'.join(lst))
结果:
1 / VV + X + Y + Z
GG / K + AA / V + X + Y + Z
答案 0 :(得分:0)
执行相同操作的一种简单方法是获取\v
和所有\e
的索引,然后检查e的索引是否大于V的索引,
如果是这样,那么请相应地更换E,因为你说你的文字只能有1,2或3个E.
答案 1 :(得分:0)
您可以在Python中轻松实现它:
def format_string(s):
start_index = s.index('/V')
change_to = ['X', 'Y', 'Z']
for c in change_to:
if '/E' in s:
target_index = s.index('/E')
if target_index>start_index:
s = s[:target_index-2] + c + s[target_index + 2:]
return s
s1 = 'AA/V+BB/E+CC/E+DD/E'
s2 = 'AA/V+BB/E+FF/F'
expected1 = 'AA/V+X+Y+Z'
expected2 = 'AA/V+X+FF/F'
print format_string(s1)==expected1
print format_string(s2)==expected2