2014-12-03 100 views
3

我有点小问题。添加标点符号到列表中?

我的任务是检查文本中是否有任何重复的单词,如果列表中有任何重复的单词,我的工作是使用.upper()突出显示它们。

文本示例:我喜欢苹果,苹果是我所知道的最好的东西。

所以我把原始文本,从标点条纹,将所有单词转换为小写,然后拆分列表。 通过for循环,我将列表中的每个单词与对方进行了比较,并且我找到了所有重复的单词,所有这些都放在了一个新列表中。

例子(使用for循环后):我喜欢苹果苹果是我知道

最好的东西所以新名单现在类似于原始名单,但有一个主要的例外,它缺少标点。

有没有办法在新列表中添加标点符号,如果它们是“假设为”(从旧名单位置)? 是否有某种方法构建在python中,可以做到这一点,还是我必须将两个列表与另一个for-loop进行比较,然后将标点符号添加到新列表中?

NewList = []#创建一个空的列表

for word in text: 
    if word not in NewList: 
     NewList.append(word) 
    elif word in NewList: # 
     NewList.append(word.upper()) 
List2 = ' '.join(NewList) 

上面的代码适用于较长的文本和,这是我已经使用的代码突出重复字。 唯一的问题是,标点不存在于新文件中,这是我唯一的问题。

+1

你可以在原来的文本使用['string.replace'(https://docs.python.org/2/library/string.html#string.replace),虽然与'叫它”苹果苹果酱''会给予''APPLES APPLES APPLESOSE''。 – 2014-12-03 16:28:40

回答

4

下面是使用sub方法与内置正则表达式模块进行回调的示例。 此解决方案尊重所有标点符号。

import re 

txt = "I like,, ,apples, apples! is the .best. thing *I* know!!1" 


def repl(match, stack): 
    word = match.group(0) 
    word_upper = word.upper() 
    if word_upper in stack: 
     return word_upper 
    stack.add(word_upper) 
    return word 

def highlight(s): 
    stack = set() 
    return re.sub('\\b([a-zA-Z]+)\\b', lambda match: repl(match, stack), s) 

print txt 
print highlight(txt) 
+0

无法启动它,不知道为什么。 – SoIsUrFace 2014-12-03 17:30:05

+0

@SoIsUrFace是否使用Python> 2.7?任何错误? – 2014-12-03 17:31:09

+0

奇怪,它现在工作。 但是它对我来说似乎非常先进。 我几乎不知道基本。甚至没有听过re.subs和类似的东西 – SoIsUrFace 2014-12-03 17:35:21