忽略python中字符串的特定部分

时间:2018-05-03 00:46:35

标签: python python-3.x

我的字符串是

I liked TAG:{Destiny2,the last Destiny game}, now I play TAG{Fortnite,Fortnite} is Destiny

所以我不想取代" Destiny"从

TAG:{Destiny2,the last Destiny game}     

但我想替换掉#34; Destiny"与

TAG:{Destiny:Destiny}    

我总是想在替换时忽略TAG中的字符串。

预期产出:

I liked TAG:{Destiny2,the last Destiny game}, now I play TAG{Fortnite,Fortnite} is TAG:{Destiny:Destiny}

请帮忙。

2 个答案:

答案 0 :(得分:1)

您需要首先解析字符串,以找出哪些Destiny子字符串位于标记内,哪些不是。我已经使用re.split完成了此操作。

我对re.split的使用返回了正则表达式模式TAG:?{.*?}周围的子串列表,并且因为我将模式括在括号中,所以标签也包含在列表中。在re.split的这种使用中,非标签将始终具有偶数索引,并且标签将始终具有奇数索引。所以我检查索引是否是偶数,如果是,我将Destiny替换为TAG:{Destiny,Destiny}

import re

s = 'TAG:{Destiny2,the last Destiny game}, now I play TAG{Fortnite,Fortnite} is Destiny'
result = []
for i, substring in enumerate(re.split('(TAG:?{.*?})', s)):
    if i % 2 == 0:
        substring = substring.replace('Destiny', 'TAG:{Destiny,Destiny}')
    result.append(substring)
result = ''.join(result)
print(result) # TAG:{Destiny2,the last Destiny game}, now I play TAG{Fortnite,Fortnite} is TAG:{Destiny,Destiny}

只要你没有嵌套在其他标签内的标签就行了。

答案 1 :(得分:0)

if(eligable.length)

输出

import re

my_string='I liked TAG:{Destiny2,the last Destiny game}, now I play TAG{Fortnite,Fortnite} is Destiny'

match = lambda x: True if len(re.split('(Destiny){1}', x)) == 3 else False 
repl =  lambda x: str.replace(x,'Destiny','TAG:{Destiny:Destiny}') if match(x) else x

l =re.split(r'({.*?})',my_string)
replaced=[repl(i) for i in l]
print(''.join(replaced))