欢迎访问宙启技术站
智能推送

prompt_toolkit.completionCompleter()实现快速模糊匹配功能

发布时间:2024-01-19 23:38:39

prompt_toolkit.completion.Completer是一个用于实现自动补全功能的类。它提供了模糊匹配功能,可以根据用户输入的部分字符串,快速匹配对应的候选项。

首先,我们需要导入必要的库:

from prompt_toolkit import prompt
from prompt_toolkit.completion import Completer, Completion

然后,我们定义一个自定义的Completer类,继承自prompt_toolkit.completion.Completer,并实现其抽象方法get_completions。在get_completions方法中,我们需要根据用户输入的字符串,返回所有与之匹配的候选项。

下面是一个示例,根据用户输入的字符串,在一个固定的字符串列表中返回与之匹配的候选项:

class MyCompleter(Completer):
    def __init__(self):
        self.options = ['apple', 'banana', 'blueberry', 'cherry', 'grape', 'kiwi', 'orange']

    def get_completions(self, document, complete_event):
        word_before_cursor = document.get_word_before_cursor()
        matches = [s for s in self.options if word_before_cursor.lower() in s.lower()]

        for m in matches:
            yield Completion(m, -len(word_before_cursor))

上面的代码中,我们将所有的候选项存储在self.options列表中。在get_completions方法中,我们首先获取输入光标前的字符串word_before_cursor,然后通过列表推导式,从self.options中筛选出与word_before_cursor匹配的候选项。最后,通过yield语句返回一个Completion对象,其中包含匹配的字符串和光标的位置。

接下来,我们使用cmd函数来模拟一个简单的命令行界面,并设置MyCompleter作为自动补全的Completer

def cmd():
    completer = MyCompleter()

    while True:
        user_input = prompt('> ', completer=completer)

        # 写入自己相应的逻辑
        print(f'You entered: {user_input}')


if __name__ == '__main__':
    cmd()

在上述代码中,我们创建了一个无限循环的命令行交互界面。用户可以输入命令,然后在prompt函数中使用completer参数,指定自动补全的Completer。用户输入的字符串将通过prompt函数的返回值赋值给user_input变量,我们可以根据user_input进行相应的逻辑处理。

当用户在命令行中输入字符串时,会自动出现与用户输入字符串匹配的候选项。