如何在Python的input()输入过程中为特定单词添加颜色高亮?
如何在Python控制台输入过程中高亮特定单词?
几乎所有代码编辑器都具备这样的功能:输入有效单词class时,该单词会被高亮显示。能否在控制台的input()输入过程中实现此功能?即用户输入如class这类特定单词时,在输入过程中就为其添加颜色高亮。我了解如何对整段输入内容统一着色,但需求是仅对用户输入的部分特定单词进行变色。
标准Python的input()函数做不到实时的部分内容高亮——它采用行缓冲机制,只有用户按下回车后才会返回完整输入。要实现输入过程中实时高亮特定单词,得用专门处理交互式终端输入的工具,比如prompt-toolkit库。
方案一:结合Pygments实现语法高亮(推荐)
这个方案利用成熟的语法分词库Pygments,能精准识别单词并高亮,适合类似代码关键词的场景:
- 安装依赖
pip install prompt-toolkit pygments
- 实现代码
from prompt_toolkit import prompt from prompt_toolkit.lexers import Lexer from pygments.lexers.python import PythonLexer from pygments.token import Token class TargetWordLexer(Lexer): def lex_document(self, document): # 用PythonLexer做基础分词 base_lexer = PythonLexer() raw_tokens = list(base_lexer.get_tokens_unprocessed(document.text)) # 定义需要高亮的目标单词集合 target_words = {"class", "def", "import", "return"} processed_tokens = [] for pos, token_type, text in raw_tokens: # 如果当前文本是目标单词,强制标记为Keyword类型(对应高亮色) if text in target_words: processed_tokens.append((pos, Token.Keyword, text)) else: processed_tokens.append((pos, token_type, text)) return lambda: processed_tokens # 启动带高亮的交互式输入 user_input = prompt("请输入内容:", lexer=TargetWordLexer()) print(f"最终输入内容:{user_input}")
- 效果说明
运行后输入包含class的内容时,该单词会立刻变成Python语法高亮中的关键词颜色(通常为蓝色),其他内容保持默认样式,完全和代码编辑器的实时高亮逻辑一致。
方案二:纯手动处理单词高亮(无额外语法库依赖)
如果不想引入Pygments,可以手动拆分输入文本中的单词,对目标单词单独着色:
from prompt_toolkit import prompt from prompt_toolkit.formatted_text import FormattedText def highlight_target_words(text): target_words = {"class", "def", "import"} formatted_parts = [] current_word = [] # 逐个字符遍历,拆分单词和非单词字符 for char in text: if char.isalnum() or char == "_": current_word.append(char) else: # 处理当前积累的单词 word = "".join(current_word) if word in target_words: formatted_parts.append(("#ff4500", word)) # 橙色高亮目标单词 else: formatted_parts.append(("", word)) # 添加非单词字符 formatted_parts.append(("", char)) current_word = [] # 处理最后一个未完成的单词 word = "".join(current_word) if word in target_words: formatted_parts.append(("#ff4500", word)) else: formatted_parts.append(("", word)) return FormattedText(formatted_parts) # 自定义输入的实时渲染逻辑 user_input = prompt("", get_prompt=lambda: highlight_target_words(prompt.app.current_buffer.text)) print(f"最终输入内容:{user_input}")
这个版本直接通过字符遍历识别单词,给目标单词加上橙色高亮,无需额外语法分析库,适合简单的自定义高亮需求。
内容的提问来源于stack exchange,提问作者Vagif
相关产品推荐
相关产品推荐

