使用 Pygments 检测代码片段的编程语言

Posted

技术标签:

【中文标题】使用 Pygments 检测代码片段的编程语言【英文标题】:Detect programming language of a snippet using Pygments 【发布时间】:2018-05-23 12:45:06 【问题描述】:

我正在使用 Pygments 库的guess_lexer() 方法来识别 sn-p 中的源代码:

这就是我现在使用它的方式:

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 部分。我知道我可以使用字符串操作来获得它,但感觉很hacky。我想以正确的方式来做。

于是我尝试查看Pygment内部在做什么,发现this method负责输出词法分析器名称:

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

【讨论】:

以上是关于使用 Pygments 检测代码片段的编程语言的主要内容,如果未能解决你的问题,请参考以下文章

我应该将 Pygments 与 Scala 应用程序一起使用吗?

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

使用 Pygments 在 Jekyll 中突出显示围栏代码块

如何使用 docutils 和 pygments 控制短/长标签名称?

在 Jekyll 中使用 Pygments 代码高亮显示文件名

Pygments 代码中的行号在 Windows 上的 xampp 中突出显示