2010-04-12 14 views
5

this post numaralı telefondan sorulup yanıtlandığı gibi, '[' ile '['] 've'] 'yerine' []] 'ile değiştirmem gerekiyor.Çoklu değiştirmeyi python'da nasıl yapabilirim?

s.replace() yöntemini kullanmayı denedim, ancak yer değişkeni olmadığından yanlış anwser almak için aşağıdaki gibi koştum.

 
path1 = "/Users/smcho/Desktop/bracket/[10,20]" 
path2 = path1.replace('[','[[]') 
path3 = path2.replace(']','[]]') 
pathName = os.path.join(path3, "*.txt") 
print pathName 
--> 
/Users/smcho/Desktop/bracket/[[[]]10,20[]]/*.txt 
  • Nasıl birden python yerine yapabilirim?
  • Ya da '[' ve ']' aynı zamanda nasıl değiştirebilirim?
+0

Kullanım regex ' '[' veya ']'', daha sonra '[' 've] bireysel yerine 'İstediğiniz ile, sonra geri katılın. –

+0

http://www.google.com/search?hl=tr&source=hp&q=python+regex+split+example&aq=0&aqi=g1&aql=&oq=python+regex+split&gs_rfai= –

cevap

12
import re 
path2 = re.sub(r'(\[|])', r'[\1]', path) 

Açıklama:

\[|] bir dirsek (açılma veya kapanma) eşleşir. Parantez içine yerleştirmek onu bir grup haline getirecektir. Daha sonra yedek dizede, \1, grubun içeriği ile değiştirilecektir. belki -

+0

Bu çözümü burada görmeyi umuyordum:). Potansiyel olarak çok sayıda gereksiz tahsisatın sebep olacağı için, dikkatsizce parçalara ayırma ve dizgileri birleştirmekten kaçınmak akıllıcadır. – SamB

3

ben regex önlemek için, ben benzersiz bir dizeyle parantezi yerini alacak, sonra kapanış parantezi yerine ve sonra benzersiz dizeyi yerine

path = "/Users/smcho/Desktop/bracket/[10,20]" 
replacements = {"[": "[[]", "]": "[]]"} 
new_path = "".join(replacements.get(c, c) for c in path) 
0
import re 
path2 = re.sub(r'(\[|\])', r'[\1]', path1) 
0

Veya benzeri bir kod kullanırsınız yol hakkında yuvarlak, ama aklımda daha basit görünüyor - daha hızlı ise sadece bir test söyleyebilirim. Ayrıca, aynı ismi tekrar kullanma eğiliminde olurum.

yani

path1 = "/Users/smcho/Desktop/bracket/[10,20]" 
path1 = path1.replace('[','*UNIQUE*') 
path1 = path1.replace(']','[]]') 
path1 = path1.replace('*UNIQUE*','[[]') 

pathName = os.path.join(path1, "*.txt") 
İlgili konular