Python正则表达式解惑

其实我已经使用Python的正则表达式很久了,今天看了Pycon2017的一个speech[2],又加深了理解。这是一个很简单的Speech,概括了Python正则表达式的用法以及一些Best Practice。

其实正则表达式常用的就那几种,熟悉了就很强大了:

  1. [ ] 表示都可以匹配,比如[abc]匹配a或b或c
  2. {1,3}表示重复1-3次
  3. [^abc]表示非abc
  4. 一些常用的匹配比如.*?表示非贪婪地匹配任何东西

现在已经有很多正则表达式教程了(包括基本上任何Python入门教程都会涉及正则表达式),这里就不多说。我对Python的正则有几个疑惑,在这个视频里面找到了答案。

一、永远使用r前缀。

python的r前缀表示原字符串(raw_string),就是字面意思的字符串,\并不表示转移。比如说r’\n’表示的是一个反斜杠,一个字母n。如果不加r即’\n’,那么\就表示转移,\和n一起表示一个换行符。可以理解为r'\n' == '\\n'

二、正则表达式中需要转义的字符。

三、Python正则表达式groups和group的区别。

详细解释在我的这个gist:https://gist.github.com/laixintao/1a550e98726ddbada0268f6b6a6490cf

group – 是获得所有的匹配,第0个是整个匹配的字符串,后面的是子匹配

groups – 是获得所有的子匹配,接受一个参数作为default。类似dict的get用法。

参考资料:

  1. PyCon Slides: https://drive.google.com/file/d/0BxJ4y96AC8m3NEpreVZLcDl0Nlk/view
  2. PyCon youtube: https://www.youtube.com/watch?v=abrcJ9MpF60&t=205s


Python正则表达式解惑”已经有2条评论

  1. 我想请问一个问题,就是在您提供的 gist 中,有这样一行代码:

    >>> m = re.match(r”(..)+”, “a1b2c3”) # Matches 3 times.

    能请您解释一下为什么这里是匹配 3 次吗?

Leave a comment

您的电子邮箱地址不会被公开。 必填项已用*标注