我的标点有一个小问题。
我的任务是检查文本中是否有任何重复的单词,如果列表中有任何重复的单词,我的工作是使用.upper()突出显示它们。
文字示例:我喜欢苹果,苹果是我所知道的最好的东西。
所以我拿了原始文本,从标点符号条纹化,将所有单词转换为小写,然后拆分列表。 使用for-loop我将列表中的每个单词相互比较,我发现所有重复的单词,所有这些都被放在一个新的列表中。
示例(使用for循环后):我喜欢苹果APPLES是我知道的最好的东西
所以新列表现在与原始列表类似,但有一个主要的例外,它缺少标点符号。
有没有办法在新列表中添加标点,如果它们是"假设是" (从旧名单位置)? 是否有某种方法可以在python中构建,或者我必须将这两个列表与另一个for循环进行比较,然后将标点符号添加到新列表中?
NewList = []#创建一个空列表
for word in text:
if word not in NewList:
NewList.append(word)
elif word in NewList: #
NewList.append(word.upper())
List2 = ' '.join(NewList)
上面的代码适用于较长的文本,这就是我用于突出重复单词的代码。 唯一的问题是新文件中没有标点符号,这是我唯一的问题。
答案 0 :(得分:4)
以下是使用内置regexp模块回调的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)