【发布时间】:2017-10-23 11:34:01
【问题描述】:
我正在尝试打印文本,同时突出显示某些单词和单词二元组。如果我不必打印标点符号等其他标记,这将是相当直接的。
我有一个要突出显示的单词列表和另一个要突出显示的单词 bigrams 列表。
突出单个单词相当容易,例如:
import re
import string
regex_pattern = re.compile("([%s \n])" % string.punctuation)
def highlighter(content, terms_to_hightlight):
tokens = regex_pattern.split(content)
for token in tokens:
if token.lower() in terms_to_hightlight:
print('\x1b[6;30;42m' + token + '\x1b[0m', end="")
else:
print(token, end="")
仅突出显示按顺序出现的单词更复杂。我一直在玩迭代器,但一直想不出任何不是很复杂的东西。
【问题讨论】:
-
您能否提供一个示例,说明您的
highlighter函数按预期工作而不是按预期工作?提示:“按顺序出现的单词”对你来说是什么样的? -
您可以先将文本拆分为一个列表,然后遍历该列表(就像您已经做过的那样)。然后,您遍历该列表并检查当前元素和下一个元素是否是有效的二元组,如果是,则将“突出显示”一词推入单独的列表中。否则,您将其“未突出显示”推入列表。确保始终检查前一个二元组是否已突出显示(新列表的)当前项。
-
@not_a_robot 他可能正在寻找单词 bigrams,这意味着连续两个单词。如果它们在二元组列表中,他正试图突出显示几个单词。这会导致重叠问题。
-
没错!我正在尝试突出显示出现在单词 bigrams 列表中的单词。这意味着这些词只有在它们实际上按顺序出现并且它们之间没有任何词的情况下才应该突出显示!
-
@Mountain_sheep 欢迎来到堆栈溢出。作为你的新人,我只想说,没有必要在你的问题中添加代码语言;这一切都由标签处理。通过标签的力量等等! :)
标签: python regex string iterator