【问题标题】:Python Replacing Strings with Dictionary valuesPython用字典值替换字符串
【发布时间】:2012-05-28 16:05:58
【问题描述】:

基于给定的输入:

我可以做得更好 waaaaaaaaaaaaaay :DDDD!!!!我对此感到非常兴奋:))) 好!!

期望:输出

我可以做得更好/LNG :D/LNG !/LNG 我很兴奋/LNG 对此感到非常兴奋 :)/LNG Good !/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

【问题讨论】:

  • 为什么第二个字符组中的所有反斜杠和重复字符?两者都不会让你的代码看起来特别容易。
  • 您是否希望用一个字母替换任何重复字母序列?这不是用“上帝”代替“好”吗?
  • :DDDD 比 :D/LNG 短。与 !!!!, ))) 和 !! 相同。我认为它应该将翻译限制在结果实际上比原始结果短的情况下,例如 waaaaaaaaaaaaaay 和 sooooooooo。
  • @interjay 在这种情况下,我认为他应该首先丢弃英语(或语言)词典中的任何单词。

标签: python regex dictionary


【解决方案1】:

这不是完美的解决方案,但我现在没有时间完善它 - 只是想让你用简单的方法开始:

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 !!'

【讨论】:

    最近更新 更多