python上的字符串替换

时间:2018-04-10 09:10:49

标签: python-3.x text text-mining python-textprocessing

我想将/ 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

2 个答案:

答案 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