您可以通过prompt_toolkit 做到这一点
如果您需要,这里是文档:
您可以通过示例中给出的以下内容将语法突出显示添加到输入中:
添加语法高亮就像添加词法分析器一样简单。所有的 Pygments 词法分析器都可以在将它们包装在 PygmentsLexer 中之后使用。也可以通过实现 Lexer 抽象基类来创建自定义词法分析器。
from pygments.lexers.html import HtmlLexer
from prompt_toolkit.shortcuts import prompt
from prompt_toolkit.lexers import PygmentsLexer
text = prompt('Enter HTML: ', lexer=PygmentsLexer(HtmlLexer))
print('You said: %s' % text)
以与上述相同的方式,您可以创建自定义prompt_toolkit.lexers.Lexer 用于计算器突出显示,就像以下示例一样。在这里,我创建了一个自定义帮助器类:
from typing import Callable
from prompt_toolkit.document import Document
from prompt_toolkit.formatted_text.base import StyleAndTextTuples
from prompt_toolkit.formatted_text import FormattedText
from prompt_toolkit.shortcuts import prompt
import prompt_toolkit.lexers
import re
class CustomRegexLexer(prompt_toolkit.lexers.Lexer):
def __init__(self, regex_mapping):
super().__init__()
self.regex_mapping = regex_mapping
def lex_document(self, document: Document) -> Callable[[int], StyleAndTextTuples]:
def lex(_: int):
line = document.text
tokens = []
while len(line) != 0:
for pattern, style_string in self.regex_mapping.items():
match: re.Match = pattern.search(line)
if not match:
continue
else:
# print(f"found_match: {match}")
pass
match_string = line[:match.span()[1]]
line = line[match.span()[1]:]
tokens.append((style_string, match_string))
break
return tokens
return lex
现在实现了上述帮助类,我们可以创建我们的正则表达式模式及其各自的样式,要了解更多关于样式字符串的信息,请访问this page
# Making regex for different operators. Make sure you add `^` anchor
# to the start of all the patterns
operators_allowed = ["+", "-", "/", "*", "(", ")", "=", "^"]
operators = re.compile("^["+''.join([f"\\{x}" for x in operators_allowed])+"]")
numbers = re.compile(r"^\d+(\.\d+)?")
text = re.compile(r"^.")
regex_mapping = {
operators: "#ff70e5", # Change colors according to your requirement
numbers: "#ffa500",
text: "#2ef5ff",
}
MyCalculatorLexer = CustomRegexLexer(regex_mapping)
创建词法分析器后,您现在可以在函数提示符中使用词法分析器:
text = prompt("Enter Equation: ", lexer=MyCalculatorLexer)
# Or
def input_maths(message):
return prompt(message, lexer=MyCalculatorLexer)
text = input_maths("Enter Equation: ")
这是一些示例输出:
现在一切正常。也请查看prompt_toolkit,您可以
创建大量自定义内容,如gallery
所示