正则表达式

阅读: 2207


正则表达式(regular expression)是一种工具,一种广泛用于匹配字符串的工具。它用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。比如 表达式“ab+”描述的特征是“一个'a'和任意个'b'”,那么'ab','abb','abbbbbbbbbb'都符合这个特征。

很多人觉得学习正则表达式太难,那是因为还没有理解正则的功用及其使用场景,没有牢固的背下它的基本语法和元字符。

考虑下面的几个场景:

  • 你要搜索一个文件,这个文件里包含了单词‘cat’(不区分字母大小写),但你并不想把包含着字符串‘cat’的其他单词(比如catch、cattle等)也找出来。
  • 你的WEB服务器接收从表单发送过来的用户邮箱地址信息。你需要检查电子邮件地址是否符合正确的语法格式。
  • 你正在编辑一段源代码并且要把所有的‘size’都替换为‘isize’,但这种替换仅仅限于‘size’单词本身,而不涉及那些包含着字符串‘size’的其他单词。
  • 你需要在文件里搜索某个特定的文本,但你只想把出现在特定位置的,比如每行的开头或是结尾的找出来。

以上场景都是我们在程序编写过程中经常会遇到的问题,用任何一种支持条件处理和字符串操作的编程语言都可以解决它们,但是解决过程可能比较复杂。例如,用一些循环来依次遍历那些单词或字符,并在循环体内用一系列的if语句来进行测试,但是这样的效率非常低下。或者,使用编程语言内置的字符串方法,比如Python语言中字符串的find方法,虽然也是可行,但功能较弱,很多场景无能为力。

这种情况下,使用正则是很好的选择,上述问题都可以通过精心构造一些匹配表达式,或者说一些由文本和特殊字符构成的高度简练的字符串来解决。

在正式学习正则之前,你要牢记下面几个事项:

  • 正则表达式本质上是一门语言,它不从属与Python!Python只是将他人写好的正则引擎集成到了语言内部,大多数编程语言都是这么干的!
  • 正则表达式诞生的时间很长,应用非常广泛,是业界公认的字符串匹配工具。虽然有不同版本的内部引擎,但基本通用,也就是说,你在Python内写的正则表达式,可以移植到Linux的shell,Java语言等任何支持正则的场景中去。
  • 正则表达式默认从左往右匹配。
  • 正则表达式默认是贪婪模式。
  • 正则表达式默认在匹配到了内容后,则终止匹配,不继续匹配。
  • 对同一个问题,编写的正则表达式不是唯一的!


评论总数: 0