我有多个字符串变体:"gr_shoulder_r_tmp"
,"r_shoulder_tmp"
我需要替换:
“r _”到 l _ ,此处:
"gr_shoulder_r_tmp" > "gr_shoulder_l_tmp"
"r_shoulder_tmp" > "l_shoulder_tmp"
换句话说,我需要在第一个例子中提升第三个硬币
搅拌的第二个例子中的第一个
我开始挖自己......
并得出了半结果的结果,这带来了一个更有趣的问题:
a)找到正确命中的索引
[i for i, x in enumerate(re.findall("(.?)(r_)", "gr_shoulder_r_tmp")) if filter(None, x).__len__() == 1]
这给了我indx = 2
?)如何使用该命中索引:[
虽然写了这个我发现直接简单的解决方案..
b)按下划线拆分,替换独立字母,然后加入
findtag = "r"
newtag = "l"
itemA = "gr_shoulder_r_tmp"
itemB = "r_shoulderr_tmp"
spl_str = itemA.split("_")
hit = spl_str.index(findtag)
spl_str[hit] = newtag
new_item = "_".join(spl_str)
itemA
,itemB
都给了我所需要的东西..但我不高兴,太沉重和粗暴
答案 0 :(得分:2)
一个简单的正则表达式将完成这项工作。
re.sub(r'(?<![a-zA-Z])r_', 'l_', s)
(?<![a-zA-Z])
负面的背后隐藏,声称匹配将在任何但不是字母之前。
示例:强>
>>> re.sub(r'(?<![a-zA-Z])r_', 'l_',"gr_shoulder_r_tmp")
'gr_shoulder_l_tmp'
>>> re.sub(r'(?<![a-zA-Z])r_', 'l_',"r_shoulder_tmp")
'l_shoulder_tmp'