Определить язык программирования фрагмента с помощью Pygments

Я использую guess_lexer() метод библиотеки Pygments для идентификации исходного кода во фрагменте кода:

Вот как я использую это прямо сейчас:

from pygments.lexers import guess_lexer
text = "string containing source code"
lexer_subclass = guess_lexer(text)
print str(lexer_subclass)

И на основе языка, представленного в text переменная, она будет возвращать что-то вроде:

<pygments.lexers.PythonLexer>

Я хочу только PythonLexer часть. Я знаю, что могу получить это, используя манипуляции со строками, но это кажется хакерским. Я хочу сделать это правильно.

Поэтому я попытался увидеть, что делает Pygment внутри, и нашел этот метод, который отвечает за вывод имени лексера:

def __repr__(self):
    if self.options:
        return '<pygments.lexers.%s with %r>' % (self.__class__.__name__,
                                                 self.options)
    else:
        return '<pygments.lexers.%s>' % self.__class__.__name__

Конечно же, если я изменю его, чтобы вернуть только self.__class__.__name__ Я получу то, что хочу, но это не правильно.

Как я могу получить то, что я хочу? Может быть, унаследовать класс, а затем переопределить функцию или что-то еще? Любые идеи будут оценены.

1 ответ

Оказывается, решение было простым. Я просто должен был использовать следующее:

guess_lexer(text).name
Другие вопросы по тегам