前一阵,QA 提了一个需求,我一看此需求用正则表达式最合适不过。考虑到之前每次使用正则表达式,都是临时抱佛脚,于是这次我就一遍完成任务一遍系统的学习了一遍正则表达式。主要参考 PyCon2016 上的一个视频 。我将分几篇文章对正则表达式进行总结。以下是第一部分,基础:
这里总结了正则表达式最基础的用法,其中大部分内容对我(以及大部分程序员)来说都是平时经常用到的,所以我就一笔带过了,只对其中的几处用例子说明。
.
^
$
[abcd]
[^abcd]
[a-d]
[a-dz]
\b
\w
\W
\d
\D
\s
\S
{5}
{2,5}
{2,}
{,5}
*
?
+
ABC|DEF
\ 表示匹配 *,\$ 表示匹配 $*
\b、 \ 用以下几个例子简单说明一下:
- >>> re.search(r'\bhello\b', 'hello')
- <_sre.SRE_Match object; span=(0, 5), match='hello'>
- >>> re.search(r'\bhello\b', 'hello world')
- <_sre.SRE_Match object; span=(0, 5), match='hello'>
- >>> re.search(r'\bhello\b', 'hello,world')
- <_sre.SRE_Match object; span=(0, 5), match='hello'>
- >>> re.search(r'\bhello\b', 'hello_world')
- >>>
其实这里,\b 大体上和 \ W 一支,但是 \ b 可以匹配行首行尾等非显示类的字符,而 \ W 不可以。
- >>> re.search(r'\$100', '$100')
- <_sre.SRE_Match object; span=(0, 4), match='$100'>
- >>> re.search(r'$100', '$100')
- >>>
想要匹配那些在正则表达式中有特殊含义的字符,如 $、^、* 等,就需要用 \ 进行转义。
另外,前面例子中,模式字符串(pattern)前面都加了一个 r,这个 r 的意思是 raw string,后面所接的字符串,Pyhton 解释器无需对其进行转义。因为,\ 在 Python 字符串中和正则表达式中都有特殊含义,所以如果不是 raw string,那么要表达一个 \ 字符,就需要四个 \ 了(在 Python 解释器中先转义一次,2 个 \ 表示 1 个 \,剩下 2 个 \,在正则表达式中又转义一次,最终剩下一个 \)。例如:
- >>> re.search(r'\bhello\b', 'hello')
- <_sre.SRE_Match object; span=(0, 5), match='hello'>
- >>> re.search('\bhello\b', 'hello')
- >>> re.search('\\bhello\\b', 'hello')
- <_sre.SRE_Match object; span=(0, 5), match='hello'>
- >>> re.search('\\\\hello\\\\', '\\hello\\')
- <_sre.SRE_Match object; span=(0, 7), match='\\hello\\'>
- >>> re.search(r'\\hello\\', '\\hello\\')
- <_sre.SRE_Match object; span=(0, 7), match='\\hello\\'>
- >>> print('\\hello\\')
- \hello\
有了这些知识,正则表达式的基本运用就没什么问题了。对于一些特殊情况,还需要掌握另外一些高级用法,敬请期待后续文章。
欢迎使用微信扫描下方二维码,关注我的微信公众号 TechTalking,技术 · 生活 · 思考:
来源: http://www.tuicool.com/articles/7RRNJrU