You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python的input()输入过程中为特定单词添加颜色高亮?

如何在Python控制台输入过程中高亮特定单词?

几乎所有代码编辑器都具备这样的功能:输入有效单词class时,该单词会被高亮显示。能否在控制台的input()输入过程中实现此功能?即用户输入如class这类特定单词时,在输入过程中就为其添加颜色高亮。我了解如何对整段输入内容统一着色,但需求是仅对用户输入的部分特定单词进行变色。


标准Python的input()函数做不到实时的部分内容高亮——它采用行缓冲机制,只有用户按下回车后才会返回完整输入。要实现输入过程中实时高亮特定单词,得用专门处理交互式终端输入的工具,比如prompt-toolkit库。

方案一:结合Pygments实现语法高亮(推荐)

这个方案利用成熟的语法分词库Pygments,能精准识别单词并高亮,适合类似代码关键词的场景:

  1. 安装依赖
pip install prompt-toolkit pygments
  1. 实现代码
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}")
  1. 效果说明
    运行后输入包含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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 05:41:15