我正在使用Pygments库的guess_lexer()
方法来识别代码段中的源代码:
这就是我现在正在使用它的方式:
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__
,我会得到我想要的,但感觉不对。
我怎样才能得到我想要的东西?也许继承类然后重写函数或什么?任何想法将不胜感激。
答案 0 :(得分:0)
事实证明解决方案很简单。我只需要使用以下内容:
guess_lexer(text).name