2012-05-28 39 views
1

基於給定的輸入:用Python解釋更換字符串值

我可以做的更好waaaaaaaaaaaaay:DDDD !!!!我太sooooooooo了吧:)))好!

期望:輸出

我能做到的方式/ LNG更好:d/LNG/LNG我這麼/ LNG exicted一下吧!)/ LNG好/ LNG

---挑戰:

  1. 更好地與soooooooooo >>我們需要保持第一位的是但縮短第二
  2. 因爲我們需要添加一個標籤(LNG),因爲它可能有主觀性和情緒

----問題集約化一些重要的第二個:錯誤信息「不對稱的括號」

任何想法?

我的代碼是:

import re 

lengWords = {} # a dictionary of lengthened words 

def removeDuplicates(corpus): 

data = (open(corpus, 'r').read()).split() 
myString = " ".join(data) 

for word in data: 
    for chr in word: 
     countChr = word.count(chr) 
     if countChr >= 3: 
      lengWords[word] = word+"/LNG" 
      lengWords[word] = re.sub(r'([A-Za-z])\1+', r'\1', lengWords[word]) 
      lengWords[word] = re.sub(r'([\'\!\~\.\?\,\.,\),\(])\1+', r'\1', lengWords[word])        

    for k, v in lengWords.items(): 
     if k == word: 
      re.sub(word, v, myString) 
return myString 
+0

爲什麼第二個字符組中的所有反斜槓和重複字符?也不會讓你的代碼特別容易。 – NPE

+3

你是否想用一個字母替換任何重複字母的序列?那麼這不是用「上帝」取代「好」嗎? – interjay

+0

:DDDD比D/LNG短。相同!!!!,)))和!!我認爲它應該將翻譯限制在結果實際上比原始縮短的情況下,如waaaaaaaaaaaaay和sooooooooo。 – jgomo3

回答

1

這不是完美的解決方案,但我沒有時間去完善它NOW-只想讓你開始用簡單的方法:

s = "I can do waaaaaaaaaaaaay better :DDDD!!!! I am sooooooooo exicted about it :))) Good !!" 
re.sub(r'(.)(\1{2,})',r'\1/LNG',s) 
>> 'I can do wa/LNGy better :D/LNG!/LNG I am so/LNG exicted about it :)/LNG Good !!'