这两天在用Python处理文本,要用正则表达式去匹配大文件数据,然而:被匹配的数据可能位于一行,也可能分布在多行,因此不能简单使用readline();而且也不知道被匹配的数据从哪里开始?长度是多少?

由于re模块的正则匹配是针对已知文本的,这样一来就需要事先获取整个文件中的文本,再使用正则表达式进行匹配。

google了一把,发现Python内置的mmap模块可以解决这个问题,于是随笔记录下了(参见[Python]re+mmap实现大文件的正则匹配)。

与此同时,无意中看到了《流数据多模式正则表达式》这篇文章,其中提到了“流式模式匹配”的概念,摘录如下:

正则表达式是一种强大的工具,当我们进行文本信息的分析和处理时通常都会用到,C++、JAVA、C#等语言都拥有各自的正则表达式库,而有些语言如Perl甚至内嵌了模式匹配。但是当我们在处理流数据时,上述的正则表达式使用起来并不顺手。因为通常的正则表达式用于搜索一个已知的文本数据,而流数据通常具有不可预知的特性,如:具体内容、长度等。另外在处理大文本时,流式模式匹配也能大大简化程序,如不必将所有文本都读入能内存、不用考虑一次读取多少文本,本次读取的文本是否正好跨越可能匹配的部分文本段,导致必须重复搜索之前的已搜索过的能容等。

忽然感觉“流式模式匹配”的概念是非常灵活和强大的,用它来解决我遇到的问题也应该是非常好的方案。于是继续google,结果好像没有发现Python中有相关的概念和应用,有点小遗憾。

在此做个记录,以备后续参考。有时间了一定要深入了解下“流式模式匹配”的原理和应用,最后能够用Python实现出来就再好不过了:)

更多相关文章

  1. 《数据结构与算法Python语言描述》裘宗燕 笔记 第五章 栈和队列
  2. python--数据库支持
  3. Python数据格式化
  4. Python数据分析相关资料
  5. Python学习笔记(3):数据集操作-列的统一操作
  6. Django 基础(一),项目创建、URL路由、数据库操作、模版
  7. Python基础1--数据类型
  8. 利用python Pandas进行数据预处理
  9. python在文本开头插入一行

随机推荐

  1. ListView的使用
  2. 建立一个简单的android涂鸦工程
  3. import android eclipse project to andr
  4. android TextView属性汇总
  5. Android 元素居中
  6. Android查看源码
  7. 获取Google Maps API 指纹证书时获取的是
  8. SQLiteDatabase 启用事务源码分析
  9. Android下图片或按钮等可拖动到任意位置
  10. Android给ListView设置分割线Divider样式