2013-12-10 116 views
4

我試圖替換一個字符串中的斜線,但不是全部 - 只有第一個逗號前的斜線。要做到這一點,我可能必須找到一種方法來匹配僅包含逗號的字符串。如何匹配一個特定的字符,只有後面緊跟着包含特定字符的字符串

是否可以這樣做使用正則表達式,即沒有首先用逗號分割字符串?

例輸入字符串:

Abc1/Def2/Ghi3,/Dore1/Mifa2/Solla3,Sido4 

我想什麼:

Abc1.Def2.Ghi3,/Dore1/Mifa2/Solla3,Sido4 

我已經試過沒有影響一些先行和回顧後發技術,所以目前要做到這一點在如Python中我首先拆分數據:

test = 'Abc1/Def2/Ghi3,/Dore1/Mifa2/Solla3,Sido4' 
strlist = re.split(r',', test) 
result = ','.join([re.sub(r'\/', r'.', strlist[0])] + strlist[1:]) 

我寧願什麼是雖然使用特定的正則表達式模式,而不是Python的面向解決方案,所以基本上我可以有一個patternreplacement使得下面的代碼會給我同樣的結果:

result = re.sub(pattern, replacement, test) 

感謝所有的正則表達式,避免了答案 - 我想知道如果我能做到這一點使用正則表達式(例如,所以我可以使用sed,而不是蟒蛇)。

+0

我看不到冒號 – Doorknob

回答

1

您可以使用lookbehind表達式來查找字符串的開頭和逗號。或者完全不使用re

s = 'Abc1/Def2/Ghi3,/Dore1/Mifa2/Solla3,Sido4' 

left,sep,right = s.partition(',') 

sep.join((left.replace('/','.'),right)) 
Out[24]: 'Abc1.Def2.Ghi3,/Dore1/Mifa2/Solla3,Sido4' 
3
item = 'Abc1/Def2/Ghi3,/Dore1/Mifa2/Solla3,Sido4' 
print item.replace("/", ".", item.count("/", 0, item.index(","))) 

這將打印你所需要的。儘量避免使用正則表達式,因爲它們很慢。

相關問題