教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 范文大全 > 公文资料 >

Pyparsing中文教程V2

来源:网络收集 时间:2026-09-11
导读: PyParsing是python实现Python风格的一个DSL,使语法解析器不再有逼格!自然语言处理也有用到。其最著名的使用应该在matplotlib上,估计因为这个包依赖坑了不少人。这个是翻译的第二版,加了markdown格式修正一些错误(也可能因为改缩进多了错误: )),之前那个是纯

PyParsing是python实现Python风格的一个DSL,使语法解析器不再有逼格!自然语言处理也有用到。其最著名的使用应该在matplotlib上,估计因为这个包依赖坑了不少人。这个是翻译的第二版,加了markdown格式修正一些错误(也可能因为改缩进多了错误: )),之前那个是纯文本,因为一开始是在豆瓣更新。

Pyparsing 导引

by Pau McGuire

你需要从文本文件或网页中提取数据吗?或者你想要更人性化的用户命令接口或者搜索字符串?正则表达式和lex/yacc让你的眼睛和脑袋疼?

Pyparsing将成为解决方案。Pyparsing是纯python的类库,其能让你容易的建立递归下降(recursive-descent)解析器。这不需要你自己写个解析器。只要使用pyparsinng,你能够解析HTML,轻松建立日志文档数据提取器,复杂数据结构以及命令解释器。这个Short Cut将告诉你怎么做!

Pyparsing 导引

Pyparsing是什么?

Pyparsing程序的简单形式

从Pyparsing出引用名字

定义语法

使用语法解析输入文本

处理解析后的文本

“Hello,World”在Steroids

什么使得Pyparsing变得不同?

类名比特殊符号好读并且好理解

语法定义中的空格的扰乱

结果应当比单纯的列表形式多更多东西

在解析时间就执行的预处理

语法必须对改变具有更强的适应性和健壮性

从表格文件中解析数据-使用解析行为和ParseResults

从网页数据中提取数据

一个简易S表达式解析器

一个完整的S表达式解析器

解析搜索字符串

100行代码以内的搜索引擎

结论

索引

PyParsing是python实现Python风格的一个DSL,使语法解析器不再有逼格!自然语言处理也有用到。其最著名的使用应该在matplotlib上,估计因为这个包依赖坑了不少人。这个是翻译的第二版,加了markdown格式修正一些错误(也可能因为改缩进多了错误: )),之前那个是纯文本,因为一开始是在豆瓣更新。

“我需要解析这个日志文件…”

“只是要从网页中提取数据…”

“我们需要一个简单的命令行解释器…”

“我们的源代码需要移植到新API集上…”

这些工作要求每天都让开发者们条件反射般的骂娘”擦,又要一个解析器!”

解析不十分严格格式的数据形式的任务经常出现在开发者面前。有时其是一次性的,像内部使用的API升级程序。其他时候,解析程序作为在命令行驱动的程序中的内建函数。

如果你在Python中变成,你可以脱离这些工作,通过使用Python的内建字符串方法,比如split(),index()以及startwith().

让这项工作又变得讨厌的是我们经常不只是对字符串分割和索引,对于一些内容可变形式或复杂的语法定义来说。比如:

y = 2 * x + 10

(每个符号间都有空分隔)

是容易解析的,对于这种空格分离的形式。不幸的是,很少有用户会如此这般使用空格,算术表达式经常像这样:

y = 2*x + 10

y = 2*x+10

y=2*x+10

直接对最后一个字符串运用split方法会导致返回原字符串(作为一个列表的唯一实例),不会分离出这些单独的元素y,=2,等等.

处理这种超越str.split的解析任务的工具是正则表达式或lex/yacc。正则表达式用一个字符串去描述文本模式以便匹配。那个字符串使用特殊符号(像|,+,.,*,?)去表示不同的解析概念像alternation(多选),repetition(重复)以及wildcards(通配符).Lex/yacc是则先拆出标记,然后应用过程代码到解压出的标记上。Lex/yacc使用一个单独的标记定义文件,然而产生lex中间文件以及标记过程代码模板给程序员扩展,以驱动程序的特殊行为。

历史注释

这些文本处理技术最早在1970年以C实现,现在它们仍在广大的领域发挥作用。Python通过re模块以及”batteries included”的部分标准库提供了对正则表达式的支持。你可以下载一些免费的lex/yacc风格的解析器模块,其提供了对python的接口。

PyParsing是python实现Python风格的一个DSL,使语法解析器不再有逼格!自然语言处理也有用到。其最著名的使用应该在matplotlib上,估计因为这个包依赖坑了不少人。这个是翻译的第二版,加了markdown格式修正一些错误(也可能因为改缩进多了错误: )),之前那个是纯文本,因为一开始是在豆瓣更新。

这些传统工具的主要问题在于它们独特的标记系统需要被精确映射到Python的代码上。比如lex/yacc风格工具往往要单独进行一个代码产生阶段。

实践中,解析器编写看起来陷入一个怪圈中:写代码,解析示例文本,找到附加的特殊情况等等。组合正则表达式符号,额外的代码生成步骤,很这个循环过程可能会不断的陷入挫折。

Pyparsing是什么?

Pyparsing是纯python编写的,易于使用。Pyparsing的类库提供了一系列类让你可以从表达式单独的元素中开始构建解析器。其表达式使用直觉的符号组合,如+表示将一个表达式加到另一个后面。|,^表示解析多选(意为匹配第一个或匹配最长的).表达式的返回值修饰以类的形式追加,如OneOrMore,ZeroOrMore,Optional.作为例子,一个正则表达式处理IP地址后面跟着一个US风格的电话号码需要这样写:

(\d{1,3}(?:\.\d{1,3}){3})\s+(\(\d{3}\)\d{3}-\d{4})

对比一下,类似的表达式用pyparsing写是这个样子

ipField = Word(nums, max=3)

ipAddr = Combine( ipField + "." + ipField + "." + ipField + "." + ipField )

phoneNum = Combine( "(" + Word(nums, exact=3) + ")" +

Word(nums, exact=3) + "?" + Word(nums, exact=4) )

userdata = ipAddr + phoneNum

尽管它使用了更长,但pyparsing版本更易读;它更容易被回朔和更新,比如可以更容易从此迁移去处理其他国家的电话号码格式,

Python新手?

我已经收到很多邮件,他们告诉我使用pyparsing也是他们第一次使用python编程。他们发现pyparsing易于得到,而且还有好读的例子。如果你是刚开始使用python,你肯恩感到一点困难阅读这些例子。Pyparsing不要求任何高级的python只是,它易于学习。有一些网络教程资源,比如python的官网。

http://www.77cn.com.cn [http://www.77cn.com.cn].

为了更好的使用pyparsing,你应当更熟悉python的语言特性,如缩进语法,

PyParsing是python实现Python风格的一个DSL,使语法解析器不再有逼格!自然语言处理也有用到。其最著名的使用应该在matplotlib上,估计因为这个包依赖坑了不少人。这个是翻译的第二版,加了markdown格式修正一些错误(也可能因为改缩进多了错误: )),之前那个是纯文本,因为一开始是在豆瓣更新。

数据类型,以及for item in itemSequence:式循环控制语法 Pyparsing使用object.attribute式标记,就像python的内建容器类,元组,表以及字典。这本书的例子使用了 python的 lambda表达式,本质上就是单行函数; lambda表达式特别有用于定义简单的解析操作时。列表解析和生成器表达式的迭代形式是有用的,在解析标记结果时,但并不是必须的。 Pyparsing是: 100%纯python,没有编译过的动态链接库(DLLs)

或者共享库包含其中,所以你可以使用它在任何平台在python2.3能够编译的地方。驱动解析表达式的被内联(inline)编码,使用标准的python类标记和符号-没有单独的代码产生过程也没有特殊符号和标记,这将 …… 此处隐藏:16249字,全部文档内容请下载后查看。喜欢就下载吧 ……

Pyparsing中文教程V2.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/fanwen/710970.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)