Home  >  Article  >  Backend Development  >  Python regular expressions: basics

Python regular expressions: basics

高洛峰
高洛峰Original
2017-03-03 11:50:171316browse

前言

之前有人提了一个需求,我一看此需求用正则表达式最合适不过。考虑到之前每次使用正则表达式,都是临时抱佛脚,于是这次我就一边完成任务一边系统的学习了一遍正则表达式。主要参考PyCon2016上的一个视频Regular Expressions。

我将分几篇文章对正则表达式进行总结。

以下是第一部分,基础: 

基础部分

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

     .           除了换行之外的其他所有字符

     ^           行首

     $           行尾

     [abcd]      abcd其中的一个字符

     [^abcd]     除了abcd之外的任意字符

     [a-d]       相当于[abcd]

     [a-dz]      相当于[abcdz]

     \b          单词边界

     \w          字母数字或下划线 相当于[a-zA-Z0-9_]

     \W          与\w相反

     \d          数字,相当于[0-9]

     \D          与\d相反

     \s          空白字符,相当于[ \t\n\r\f\v]

     \S          与\s相反

     {5}         在此之前的正则表达式部分(下同)准确的出现5次

     {2,5}       ~出现2到5次

     {2,}        ~出现2次或多次

     {,5}        ~出现0到5次

     *          ~出现0次或多次

     ?          ~出现0次或1次

     +           ~出现1次或多次

     ABC|DEF     匹配ABC或者DEF

     \          转义字符,如\表示匹配*,\$表示匹配$* 

\b、 \用以下几个例子简单说明一下: 

     \b:

>>> re.search(r'\bhello\b', 'hello')
<_sre.SRE_Match object; span=(0, 5), match=&#39;hello&#39;>
>>> re.search(r&#39;\bhello\b&#39;, &#39;hello world&#39;)
<_sre.SRE_Match object; span=(0, 5), match=&#39;hello&#39;>
>>> re.search(r&#39;\bhello\b&#39;, &#39;hello,world&#39;)
<_sre.SRE_Match object; span=(0, 5), match=&#39;hello&#39;>
>>> re.search(r&#39;\bhello\b&#39;, &#39;hello_world&#39;) 
>>>

其实这里,\b大体上和\W一支,但是\b可以匹配行首行尾等非显示类的字符,而\W不可以。 

     \:

>>> re.search(r&#39;\$100&#39;, &#39;$100&#39;)
<_sre.SRE_Match object; span=(0, 4), match=&#39;$100&#39;>
>>> re.search(r&#39;$100&#39;, &#39;$100&#39;) 
>>>

想要匹配那些在正则表达式中有特殊含义的字符,如$、^、*等,就需要用\进行转义。 

raw string:

另外,前面例子中,模式字符串(pattern)前面都加了一个r,这个r的意思是raw string,后面所接的字符串,Pyhton解释器无需对其进行转义。因为,\在Python字符串中和正则表达式中都有特殊含义,所以如果不是raw string,那么要表达一个\字符,就需要四个\了(在Python解释器中先转义一次,2个\表示1个\,剩下2个\,在正则表达式中又转义一次,最终剩下一个\)。例如:

>>> re.search(r&#39;\bhello\b&#39;, &#39;hello&#39;)
<_sre.SRE_Match object; span=(0, 5), match=&#39;hello&#39;>
>>> re.search(&#39;\bhello\b&#39;, &#39;hello&#39;) 
>>> re.search(&#39;\\bhello\\b&#39;, &#39;hello&#39;)
<_sre.SRE_Match object; span=(0, 5), match=&#39;hello&#39;>

>>> re.search(&#39;\\\\hello\\\\&#39;, &#39;\\hello\\&#39;) 
<_sre.SRE_Match object; span=(0, 7), match=&#39;\\hello\\&#39;>
>>> re.search(r&#39;\\hello\\&#39;, &#39;\\hello\\&#39;) 
<_sre.SRE_Match object; span=(0, 7), match=&#39;\\hello\\&#39;>
>>> print(&#39;\\hello\\&#39;)
\hello\

更多Python正则表达式:基础篇相关文章请关注PHP中文网!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn