Archive

Archive for 2010-06

使用python做简单规则的文本过滤

06月 22, 2010 发表评论

当报文内容很多时为了方便用户选择查看有意义的报文, 可以对报文进行过滤. 支持用户输入需要过滤的字符的关键字. 比如输入要过滤的关键字为”nMcuAdrs=0×10301″. 那么对于nMcuAdrs=0×10301的报文则不显示, 仅显示满足关键字过滤规则的报文. 当需要有多个要过滤的关键字时, 需要支持一下的规则:

  1. 与 key1 and key2, 表示既要满足关键字key1也要满足关键字key2.
  2. 或 key1 or key2, 表示只要满足key1或者kye2任一即可.
  3. 支持与和或的组合, 与的优先级高于或. 比如 key1 and key2 or key3, 表示只要满足key1、key2, 或者key3即可
  4. 括号的优先级高于and. 比如 key1 and (key2 or key3), 表示满足key1并且满足key2、key3中任一即可.

每一个关键字都用双引号括起来, 比如输入过滤的字符为”nMcuAdrs=0×10301″ and “CmdCode = 0x11ab”, 表示既要满足nMcuAdrs=0×10301也要满足CmdCode = 0x11ab.

上述规定的and、or、()语法和python的算术表达式的语法是一样的, 再结合python的eval函数和正则表达式能够很简单的解决上述文本过滤问题.


import re
def multiple_match(text, message):
def match(string):
return str(bool(re.search(string.group(1), message)))
pattern = re.compile("\"([^\"]*)\"")
return pattern.sub(match, text)

  1. text是过滤规则表达式, message是需要过滤的文本(eg. text=”\”hello\” and \”world\”", message=” icesorrow, hello!”)

  2. 先从text中提取被双引号引用的keyword, 然后用keyword去message中匹配, 返回一个布尔值的字符串

  3. 通过这个函数处理之后会得到 “True and False”(是个字符串), 再使用eval函数就可以得到结果了, 包含括号的语法同样也可以处理

再引入异常处理, 对eval的表达式做语法分析, 以纠正用户输入的文本过滤表达式, 最后的版本如下:


import re
def multiple_match(text, message):
def match(string):
return str(bool(re.search(string.group(1), message)))
pattern = re.compile("\"([^\"]*)\"")
return eval(pattern.sub(match, text))

if __name__=="__main__":
text = "\"hello\" and (\"world\" or \"haolee\")"
message = " haolee, hello!"
try:
print multiple_match(text, message)
except SyntaxError:
print "syntax error: check filter expression"

分类: Python 标签:, ,

其实什么也不是

06月 21, 2010 2 条评论

以前让人捧的多了, 渐渐的认为自己是个什么东西

实际上呢? 啥也不是

一向不喜欢依靠别人, 习惯了单枪匹马, 渐渐的完全不会teamwork了

对自己过分的自信, 加上做事拖沓的习惯, 是这次mission failed的主因, 而且身为队长, 没有为全队制定明确的计划, 协调全队的合作更是失责.

——–我在此向两位队友道歉

分类: MyTrueLife 标签:

World Cup 2010 Google Calendar

06月 9, 2010 发表评论

为了加快主页的加载速度, 订阅此日历的用户请从下面的链接进入.

阅读更多…

分类: MyTrueLife 标签:,

工大印象 90周年校庆

06月 6, 2010 6 条评论
分类: MyTrueLife 标签:,

Google App Engine & Flex

06月 3, 2010 4 条评论

之前的位于http://icesorrow.appspot.com/的Google App Engine & Django应用已经移除, 取而代之的是一个发布在http://icesorrow.appspot.com/client/GaeFlex.html的Google App Engine & Flex应用, 它解决了之前的版本存在的多个问题. Flex应用会生成一个Flash, 和一般的web应用(php, jsp, django)不同, 它更像是嵌入在浏览器中的客户端程序, 之所以说是客户端, 是因为它需要实现自己的服务器端程序, 这个应用的服务器端程序是用python写的, 两者的通信借助的是pyamf. 系统的架构图如下. 最新的代码可以在Google Code的icesorrow-gae-flex项目中得到.

06月 2, 2010 3 条评论
很久不写日志了, 多方面的原因, 首先回顾一下过去的一个月吧, 时间稍微久远一点的已经记不住了, 我想当时应该是挺有感觉的, 可惜没有记下来就这么淡忘了.
  • 接管实验室服务器: 5月中左右实验室的服务器当机了, 借此机会实验室08级师兄将服务器管理任务移交到09级. 上周从网络中心把实验室的服务器扛回实验室维修, 故障原因不明(主板烧了可能), 直接卸下硬盘换到另外一台机器上, 反正实验室的服务器也就是一般的PC机. 服务器的系统是Ubuntu6.06, 提供的服务也不多, web、ftp、squid. 系统起来后, 启动网络服务, 发现apache2解析不了php, 但php模块是成功加载了的, 瞎搞了一个下午, 才发现是文件权限的问题. ri. 在服务器检查没问题之后又搬回了网络中心, 隔了2天又有问题了, 服务器连接不上. 5.31早上又去网络中心维护, 一到那边打开显示器发现, “蓝屏”. 想也没想直接强制关机, 关机的一瞬间哥后悔了, ri, 我们的服务器是linux. 可能是其他实验室的网管把显示器接到了他们的Windows上, 重启系统和网络之后一切正常.
  • Blog多番迁移: 从今年1月左右Yo2开始挂掉, 就一直找不到好的blog系统, Yo2 wordpress->blogbus->Hi.baidu->wordpress(墙外)->msn space, 这貌似是前段时间一直尝试使用的blog系统, 原本以为实验室的机器是固定IP, 所以也在实验室的PC机上架过一个wordpress blog, 后来发现隔了一个多月还是会变的. 如今已执掌BCC网管要职, 自然可以考虑在实验室的服务器上架个blog, 而且还有域名, 挺不错的说.(Yo2貌似现在也能访问, 速度比较慢, 但是还是后台进不去, 他们号称服务器迁到了HK, 但前几天在HK上网Yo2 blog后台还是上不去, Yo2就这么黄了么?)
  • 中兴捧月: 前段时间和Judy、Bai组队报名参加的一个中兴的编程比赛, 那段时间正好赶上很多课程的考试和课程设计, 一直拖到最后才做, 5.31晚草草提交了预赛文档, 不知有没有后续…
  • 各种考试: 话说数字图像处理考试考前只复习了一个小时, 然后考试提前半个多小时交卷, 而且居然发现还考的不错, 于是欣欣然以为自己对数字图像处理这门课掌握的还不错, 但实际做course project的时候发现完全不是那么一回事, 这就是考试带来的错觉.
现在研一的课程基本结束了(除了英语), 大致规划一下未来一个月的安排.
  • 实验室的服务器配置. 主要是mail和wiki, 实验室的主页貌似也需要更新了.
  • 门禁系统的管理系统. 实验室为PolyU做的一个门禁系统, 管理系统部分是用Delphi写的, 主要是熟悉代码, 方便以后对系统的维护, 不过对Delphi确实没有什么大的兴趣, 还是比较喜欢python和cpp.
  • 研究生毕业课题. 得准备一下开题了貌似.
加关注

Get every new post delivered to your Inbox.