Pyparsing中文教程V2
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字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [公文资料]市场营销专员岗位职责
- [公文资料]综合部经理岗位职责
- [公文资料]会计助理岗位职责
- [公文资料]林业站站长职责
- [公文资料]菜品研发部岗位职责
- [公文资料]街道综治办工作职责
- [公文资料]酒店前台的工作职责
- [公文资料]销售部经理岗位职责
- [公文资料]工程部副经理岗位职责
- [公文资料]手术室护士工作职责
- [公文资料]银行客户经理职责
- [公文资料]汽车4s店市场专员职责
- [公文资料]服装店长工作职责
- [公文资料]采购总监岗位职责
- [公文资料]大学行政秘书工作职责
- [公文资料]学校财务人员岗位职责
- [公文资料]财务统计员岗位职责
- [公文资料]物业工程主管工作职责
- [公文资料]公司后勤工作职责
- [公文资料]采矿工程师岗位职责
- 门面出租合同样板(门面出租的合同)
- 自用房屋租赁合同 自住房租房合同(汇总
- 最新酒店劳动合同管理制度(11篇)(酒店
- 2025年无产权车库买卖合同实用(14篇)(
- 建筑工程农民工劳动合同十五篇(通用)(
- 最新深圳标准劳动合同 深圳劳动合同如
- 解除劳动合同通知书(实用6篇)(解除劳动
- 2025年二手房屋买卖合同范围精选(二十
- 最新融资贷款居间合同大全(22篇)(融资
- 2025年个人二手房屋买卖合同协议书四篇
- 2025年果树苗木买卖合约书 签订果树苗
- 广东省劳动合同书填写(21篇)(广东省劳
- 最新餐饮行业没有劳动合同 劳动法餐饮
- 农村土地买卖合同(汇总21篇)(农村土地
- 最新房屋转租合同模版21篇(通用)(标准
- 2025年进口合同号查询五篇(大全)(进口
- 农村建房包工包料合同(通用8篇)(农村建
- 2025年安装监控合同协议书(15篇)(2025
- 2025年企业租赁经营合同(模板9篇)(2025
- 最新郊区土地租赁合同(优质23篇)(最新




