我的字符串是
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}
请帮忙。
答案 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))