Python正则表达式之四:re模块


在这一篇文章里,我将总结一下Python中re模块的基本用法。

re

最最基本的用法就是re.search了,在前面的三篇文章中,我们也已经见过多次,这里就不再赘述了。

re.sub

使用正则表达式进行查找替换,正是re.sub的功能。

例如,下面这个例子,将格式化列与之间逗号的用法:

1
2
3
>>> row = "column 1,column 2, column 3"
>>> re.sub(r',\s*', ',', row)
'column 1,column 2,column 3'

下面这个例子更复杂一些,配合正则表达式中的捕获和引用特性,可以方便的转换日期格式:

1
2
3
>>> sentence = "from 12/22/1629 to 11/14/1643"
>>> re.sub(r'(\d{2})/(\d{2})/(\d{4})', r'\3-\1-\2', sentence)
'from 1629-12-22 to 1643-11-14'

re.split

一次泡脚引发的“命案”



最近闲了,晚上在家不时泡个脚,顺便捧起《寂静的春天》阅读几页,某天泡脚时发现书中知更鸟的英文是robin,得意地向Mr.Guo显摆了一番。
Mr.Guo反击说:”杀死一只知更鸟”
我:”啊?! 你说那本书吗?”
Mr.Guo:”是啊,我还没看过…后来还拍过电影”(Mr.Guo已经开始在网上搜索了)
我:”那我们先看书再看电影,好不好?”
Mr.Guo叫嚣道:”知更鸟是Mockingbird!”
我:”不是啊,这书上写的是robin!”(两人反复嚷嚷了2遍,感觉要打起来了)
Mr.Guo:”你看嘛,杀死一只知更鸟翻译的是To Kill a Mockingbird!”
我:”到底谁错了,去查大英辞典吧!”


若是点进来为了看热闹的童鞋,看到这里就可以毫不回头地走了,自封为学术帝的童鞋往下看是学术烧脑阶段。

Python正则表达式之三:贪婪


在这一篇文章里,我将总结一下正则表达式的贪婪/非贪婪特性。

贪婪

默认情况下,正则表达式将进行贪婪匹配。所谓“贪婪”,其实就是在多种长度的匹配字符串中,选择较长的那一个。例如,如下正则表达式本意是选出人物所说的话,但是却由于“贪婪”特性,出现了匹配不当:

1
2
3
>>> sentence = """You said "why?" and I say "I don't know"."""
>>> re.findall(r'"(.*)"', sentence)
['why?" and I say "I don\'t know']

Python正则表达式之二:捕获


在这一篇文章里,我将总结一下正则表达式关于捕获的用法。

捕获

捕获和分组在正则表达式中有着密切的联系,一般情况下,分组即捕获,都用小括号完成(因此,小括号在正则表达式中也属于特殊字符,表达原含义时需要转义):

(…) 正常分组,并捕获
(?:…) 分组,但是不捕获

Python正则表达式之一:基础


前一阵,QA提了一个需求,我一看此需求用正则表达式最合适不过。考虑到之前每次使用正则表达式,都是临时抱佛脚,于是这次我就一边完成任务一边系统的学习了一遍正则表达式。主要参考PyCon2016上的一个视频Regular Expressions。我将分几篇文章对正则表达式进行总结。以下是第一部分,基础:

基础部分


这里总结了正则表达式最基础的用法,其中大部分内容对我(以及大部分程序员)来说都是平时经常用到的,所以我就一笔带过了,只对其中的几处用例子说明。

MySQL设置远程访问权限


最近SA给帮忙升级了开发机系统版本,所以数据库的好多配置丢失了。测试同学发现从内服数据中心访问不到我开发机上的数据库了,经过一番查证,发现是我这边开发机上MySQL没有给数据中心那台机器开访问权限。

探索skynet(二):skynet如何启动一个服务


skynet框架是由C语言写成的,而skynet的服务可以完全用lua语言来编写,灵活性很高。那skynet是如何启动一个lua语言编写的服务的的呢?skynet服务,在skynet框架中,具体是以什么形式存在的呢?

带着这些问题,我们来一起看看skynet的源码。

探索skynet(一):从skynet_sample说起


skynet是云风写的一个轻量级的游戏服务器框架。它以服务为主要的逻辑对象,底层框架支持服务之间的同步/异步调用。由于服务并不是占用独立进程,所以服务之间的调用实现的非常高效。同时,为每个服务启动了一个lua虚拟机(lua_State),实现了服务之间的互不干扰。

但是,skynet是非常轻量的,它并没有实现其他游戏服务器框架中常有的场景管理、用户AOI管理等功能,这些功能,skynet使用者可以按照自己的设计思路使用若干个服务实现。

skynet是开源的,使用c和lua实现,使用者可以只使用lua而不需要有c基础。在GitHub的页面上有非常详细的wiki页,我在阅读源码的过程中就在不断的参考wiki页,非常有帮助。

2016年下半年书单


这半年公司搬去了珠江新城,再也不能走路上下班了。不过每天地铁上来回有半个小时的时间,正好可以用来读书。

非技术类

  • 大秦帝国(黑色裂变) (国命纵横) 孙皓晖
    • 这两部主要是讲的商鞅变法以及苏秦张仪的合纵连横时期。历史小说的好处是,让历史书中一行行冷冰冰的文字中,那些人物、事件变得有血有肉,互相之间有了关联。对于商鞅变法,中学历史书中,无非寥寥百来字,而对于苏秦张仪,可能就更是只有一两行描述了。然而,他们在这些文字背后的人生,也是大落大起的啊。纵是像他们这般雄才大略,人生中也难免挫折,而挫折、蛰伏,就像是他们人生中的下蹲、积蓄力量,是为了后面可以达到更高的高度。愈挫愈勇,愈败愈战的性格,使得他们越来越强,才能够最终在历史上留下自己的名字。

这些年,你写了多少行代码


又到了辞旧迎新的时候。最近已经被各路大拿的总结砸的晕头转向了,心想人家的2016为何能做那么多事那么精彩呢?不过还好,我有“幸存者偏差”这一法宝安慰自己……

言归正传,前一阵突然想到,自己进入项目组已经差不多两年了,不如用最朴素的方式——统计代码行数——来总结下吧。

虽然目前已经有各种各样的工具可以做这件事情,不过自己写一个应该也很快,说不定还有其他发现呢。