前言

使用Python,大部分时间花在了处理文本上。在处理文本的时候,如果对有限状态机有所了解的话,处理起来会更加得心应手。可以把文本看成一个流,然后有一个机器对这个流进行操作。这个机器有状态,不同的状态会做出不同的处理,状态会随着处理进行变化。

例子

oracle数据库中有一个存储过程,该存储过程中有很多select语句,要把所有的select语句提取出来。

代码:

--存储过程代码
create or replace procedure demo()
is
begin insert into table_1
select a1,a2,a3
from table_2; insert into table_1
select a1,a2,a3
from table_3; insert into table_1
select a1,a2,a3
from table_4; commit; exception
when others then
insert into table_log(error_msg)values(sqlerrm); end;
#python代码
def parse(s):
l=[]
state=0 #状态
for i in s:
if state==0: #状态为0的处理
if 'select' in i:
l.append(i)
state=1 #状态改变
if ';' in i:
state=0
elif state==1: #状态为1的处理
l.append(i)
if ';' in i:
state=0 #状态改变
return l

结果:

    select a1,a2,a3
from table_2;
select a1,a2,a3
from table_3;
select a1,a2,a3
from table_4;

最新文章

  1. 关于php的mysqlnd驱动
  2. WorldWind源码剖析系列:BMNG类构造函数深入分析
  3. Windows Management Instrumentation WMI Security Technology Learning
  4. java笔试二
  5. 开发Android 范的错误
  6. 4.给定一个正整数m,统计m的位数,分别打印每一位数字,再按照逆序打印出各位数字。 要求:m定义为类的属性,需定义构造函数为m赋值;当m大于99999时,输出错误信息“the number is too large”,不再执行。
  7. python之poplib库
  8. 关于Androdi中SQLITE 3采用GBK编码存储,数据库中文乱码问题。
  9. js监听鼠标滚动
  10. COJ 0015 20602铁轨
  11. Java 9 揭秘(10. 模块API)
  12. JS事件练习题
  13. bootstrap开发微票儿网站首页
  14. asynicio模块以及爬虫应用asynicio模块(高性能爬虫)
  15. C#-----中使用using详解
  16. 爬虫----requests模块
  17. Linux基础命令---paste
  18. Python 自动爬取B站视频
  19. 【Java虚拟机】运行时数据区
  20. ScriptX使用

热门文章

  1. ssh-keygen不是内部或外部命令
  2. BAT command
  3. 深入理解Spring Redis的使用 (一)、Spring Redis基本使用
  4. 深入理解Java:注解(Annotation)--注解处理器
  5. linux 打造man中文帮助手册
  6. virtualbox 中的linux 共享文件 发生文件系统类型错误的解决办法
  7. 利用afxDump来调试自己的程序
  8. EDW on Hadoop(Hadoop上的数据仓库)技术选型和实践思考
  9. Ajax中的get和post两种请求方式的异同
  10. [译]AngularJS Service vs Factory - Once and for all