Python中Pygments.lexers使用介绍
Pygments是一个功能强大的语法高亮库,可以用于将各种编程语言和文件格式的代码进行高亮显示。其中,Pygments.lexers模块包含了许多内置的词法解析器(lexer),用于识别并分类不同类型的代码。
本文将介绍Pygments.lexers的常见用法,并提供一些使用示例。
## 安装与导入
首先,你需要安装Pygments库。你可以使用以下命令通过pip安装:
pip install Pygments
然后,你可以在Python中导入Pygments.lexers模块:
from pygments import lexers
## 获取所有的可以识别的编程语言
你可以使用lexers.get_all_lexers()函数获取Pygments支持的所有编程语言和文件格式。以下是一个例子:
all_lexers = lexers.get_all_lexers()
for lexer in all_lexers:
print(lexer[0], '-', lexer[1][0])
输出结果:
ABAP - abap ActionScript - actionscript3 ...
## 根据文件名或者文件类型获取词法解析器
你可以根据文件名或者文件类型来获取适合的词法解析器。以下是一个例子:
filename = 'example.py' lexer = lexers.get_lexer_for_filename(filename) print(lexer.name)
输出结果:
Python
如果你只知道文件类型而不知道文件名,你可以使用get_lexer_for_mimetype函数:
mimetype = 'text/html' lexer = lexers.get_lexer_for_mimetype(mimetype) print(lexer.name)
输出结果:
HTML
## 高亮显示代码
你可以使用获得的lexer对代码进行高亮显示。以下是一个例子:
code = '''
def hello_world():
print("Hello, world!")
hello_world()
'''
lexer = lexers.get_lexer_for_filename('example.py')
highlighted_code = highlight(code, lexer, TerminalFormatter())
print(highlighted_code)
输出结果:

## 自定义词法解析器
如果你需要自定义词法解析器,你可以继承RegexLexer类,并实现__init__和get_tokens_unprocessed方法。以下是一个简单的例子:
from pygments.lexers import RegexLexer
from pygments.token import *
class CustomLexer(RegexLexer):
name = 'CustomLexer'
aliases = ['custom']
filenames = ['*.custom']
tokens = {
'root': [
(r'\w+', Keyword),
(r'\s+', Text),
]
}
上述例子中,我们创建了一个名为CustomLexer的自定义词法解析器。我们使用了正则表达式来定义关键字和文本的规则。你可以根据需要进行扩展和修改。
使用自定义词法解析器的方法与之前相同:
code = ''' hello world ''' lexer = CustomLexer() highlighted_code = highlight(code, lexer, TerminalFormatter()) print(highlighted_code)
输出结果:

这只是使用Pygments.lexers模块的一些基本用法示例。Pygments还有许多其他功能和配置选项,可以满足更复杂的需求。你可以在Pygments的官方文档中进一步了解和学习:[https://pygments.org](https://pygments.org)。
希望这篇文章对你了解和使用Pygments.lexers模块有所帮助!
